Java Forums

Main Menu
Home
Today's Posts
FAQ
Search
Contact Us

Java Network
Linux Archive
Java Tips
Java Tips Blog

Sponsored Links





Welcome to the Java Forums.

You are currently viewing our boards as a guest which gives you limited access to view most discussions and access our other features. By joining our free community, you will:

  • have access to post topics
  • communicate privately with other members (PM)
  • not see advertisements between posts
  • have the possibility to earn one of our surprises if you are an active member
  • access many other special features that will be introduced later.

Registration is fast, simple and absolutely free so please, join our community today!

If you have any problems with the registration process or your account login, please contact us.

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 03-09-2008, 02:08 PM
Member
 
Join Date: Mar 2008
Posts: 3
mindwarp is on a distinguished road
Vectors of Vectors or hash-somethings?
Hi All,

I have an object called PICSet, which stores info about groups of pictures.
Each PICSet instance has a Vector of Associated Images (strings)
Each PICSet instance also has a Vector of Features (AU's) visible in that group..

I have another class which manipulates a vector of these PICSet objects (so there are Lots of sessions/groups)
Code:
class PICSet{ public String SUBJECT; public String SESSION; public Vector ASSOCIATEDIMAGES; // actually contains Strings (filenames) public Vector AUsPresent; // actually contains ints public PICSet(String subj, String sess) public String toString() public void AssociateAU(int AU) } class PICSetManager{ Vector PICSets = new Vector(); }
Given a particular AU feature, I want to find All associated images from the Vector PICSets.

What's the easiest - most efficient - way of doing this?
If there's a better way of doing this (including HashTable/Maps etc) I'd like to know please...

__________
MindWarp

Last edited by mindwarp : 03-09-2008 at 03:28 PM. Reason: technical error in code description
Bookmark Post in Technorati
Reply With Quote
Sponsored Links
  #2 (permalink)  
Old 03-09-2008, 11:39 PM
Senior Member
 
Join Date: Jul 2007
Posts: 1,222
hardwired is on a distinguished road
Code:
import java.util.*; import java.util.List; public class PICTest { // Make up some AU constants. static final int A = 1; static final int B = 2; static final int C = 3; static final int D = 4; public static void main(String[] args) { PICStoreManager manager = new PICStoreManager(); // Add some PICStores. addStores(manager); // Add some image fileNames. addImageNames(manager); // Add some AU features. addFeatures(manager); for(PICStore store : manager.picStores) System.out.println(store); // Collect the image filePaths for the AU feature A. List<String> list = manager.getImagesByAU(A); for(int j = 0; j < list.size(); j++) { System.out.println((String)list.get(j)); } } private static void addStores(PICStoreManager manager) { // Make up some PICStores to manage. String[] subjects = { "town hall", "steeple", "clown", "river" }; String[] sessions = { "first", "ninth", "third", "sixth" }; List<PICStore> picStores = manager.picStores; for(int j = 0; j < subjects.length; j++) { picStores.add(new PICStore(subjects[j], sessions[j])); } } private static void addImageNames(PICStoreManager manager) { String[][] fileNames = { { "entrance.jpg" }, { "center.png", "top.jpg", "detail.jpg" }, { "face.gif", "hands.jpg" }, { "surface.gif", "southBend.png", "bottom.gif", "swirl.jpg" } }; List<PICStore> picStores = manager.picStores; for(int j = 0; j < picStores.size(); j++) { PICStore store = (PICStore)picStores.get(j); for(int k = 0; k < fileNames[j].length; k++) { store.addImageName(fileNames[j][k]); } } } private static void addFeatures(PICStoreManager manager) { int[][] features = { { C, A }, { B, D, C }, { A }, { B, A } }; List<PICStore> picStores = manager.picStores; for(int j = 0; j < picStores.size(); j++) { PICStore store = (PICStore)picStores.get(j); for(int k = 0; k < features[j].length; k++) { store.AssociateAU(features[j][k]); } } } } class PICStoreManager { List<PICStore> picStores = new ArrayList<PICStore>(); public void addPICStore(PICStore store) { picStores.add(store); } public List<String> getImagesByAU(int AU) { Integer target = Integer.valueOf(AU); List<String> list = new ArrayList<String>(); for(PICStore store : picStores) { if(store.AUsPresent.contains(target)) { // Found the target AU feature in this store. // Add all the image pathStrings to list. list.addAll(store.ASSOCIATEDIMAGES); } } return list; } } class PICStore { public String SUBJECT; public String SESSION; public List<String> ASSOCIATEDIMAGES; // contains Strings (filenames) public List<Integer> AUsPresent; // contains ints public PICStore(String subj, String sess) { SUBJECT = subj; SESSION = sess; ASSOCIATEDIMAGES = new ArrayList<String>(); AUsPresent = new ArrayList<Integer>(); } public String toString() { return getClass().getName() + "[SUBJECT:" + SUBJECT + " SESSION:" + SESSION + "]"; } public void addImageName(String name) { ASSOCIATEDIMAGES.add(name); } public void AssociateAU(int AU) { // What if AUsPresent already contains this AU feature? AUsPresent.add(new Integer(AU)); } }
Bookmark Post in Technorati
Reply With Quote
  #3 (permalink)  
Old 03-10-2008, 11:06 AM
Member
 
Join Date: Mar 2008
Posts: 3
mindwarp is on a distinguished road
better solution?

Hi, thanks for answering

I have some questions on your code:

In PICStoreManager, why did you use " Integer target = Integer.valueOf(AU); "
instead of " int target = Integer.valueOf(AU); " ????? Why are you wrapping the int into an Integer?

In PICStore.AssociateAU(int AU) wrt the comment - I first check that it's not already there..

Also, I did a small experiment:

Code:
import java.util.*; public class vectortest{ static class newobj{ int val; int val2; public newobj(int v1,int v2){ val = v1; val2 = v2;} public String toString(){ return ( "[" + getClass().getName() + ": " + val + ", " + val2 + "]" ); } } public static void main(String[] args){ Vector V1 = new Vector(); for (int i = 0; i< 6; i++) V1.add(i); for (int i = 0; i< 5; i++) V1.add((char)('a'+ i)); for (int i = 27; i< 31; i++) V1.add(i); boolean b = true; for (int i = 0; i < 5; i++){ V1.add(b); b = (b ? false: true); } for (int i = 0; i < 5; i++) V1.add(new newobj(i,i+2)); for (int j = 0; j<V1.size(); j++){ System.out.print("{" + (""+V1.elementAt(j)).toString()+ "}"); } System.out.println(); System.out.println("vector contains a 3: " + V1.contains(3)); System.out.println("vector contains a 5: " + V1.contains(5)); System.out.println("vector contains a a: " + V1.contains('a')); System.out.println("vector contains a e: " + V1.contains('e')); System.out.println("vector contains a 30: " + V1.contains(30)); System.out.println("vector contains a 31: " + V1.contains(31)); newobj no = new newobj(1,3); System.out.println("vector contains a newobj(1,3):" + V1.contains(no)); System.out.println(); } }

output:
Quote:
{0}{1}{2}{3}{4}{5}{a}{b}{c}{d}{e}{27}{28}{29}{30}{ true}{false}{true}{false}{true}{[vectortest$newobj: 0, 2]}{[vectortest$newobj: 1, 3]}{[vectortest$newobj: 2, 4]}{[vectortest$newobj: 3, 5]}{[vectortest$newobj: 4, 6]}
vector contains a 3: true
vector contains a 5: true
vector contains a a: true
vector contains a e: true
vector contains a 30: true
vector contains a 31: false
vector contains a newobj(1,3):false


So, why is it not easier to do the following (looks a lot like your code)?
Code:
public String getImagesByAU(int AU){ // untested, pls excuse any typos Vector imgsFound = new Vector(); for (int i = 0; i< PICSets.size(); i++){ if (((PICSet) (PICSets.elementAt(i))).AUsPresent.contains(AU)) imgsFound.addAll( (PICSet) (PICSets.elementAt(i).ASSOCIATEDIMAGES) ); } return imgsFound; }
Changing to Lists will mean significant rewriting of my code, but if the advantage is that much greater then it is an option I'll look at.
Would you like to deliberate?
Also, I was hoping for a solution using a structure that could automatically map them AU features to ASSOCIATEDIMAGES, if at all possible (without writing the structure myself)

Bookmark Post in Technorati
Reply With Quote
  #4 (permalink)  
Old 03-10-2008, 04:57 PM
Senior Member
 
Join Date: Jul 2007
Posts: 1,222
hardwired is on a distinguished road
In PICStoreManager, why did you use " Integer target = Integer.valueOf(AU); "
instead of " int target = Integer.valueOf(AU); " ????? Why are you wrapping the int into an Integer?

Collections take Objects and not primitives. The auto–boxing feature in j2se 1.5+ allows us to overlook this.

In PICStore.AssociateAU(int AU) wrt the comment - I first check that it's not already there..
Just another option: whether you want multiple AU feature constants in the collection or not. Depends on what you are doing.

So, why is it not easier to do the following (looks a lot like your code)?
Looks like you have things figured out the way you want them.

Changing to Lists will mean significant rewriting of my code, but if the advantage is that much greater then it is an option I'll look at.
Vectors are fine.
Bookmark Post in Technorati
Reply With Quote
Sponsored Links
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Help with Vectors and Strings... kaban New To Java 2 12-09-2007 11:04 AM
Vectors vs ArrayList Java Tip Java Tips 0 11-28-2007 12:29 PM
Understanding Vectors cbrown08 New To Java 7 11-05-2007 08:56 PM
Using Vectors in Java JavaForums Java Blogs 0 11-04-2007 09:31 PM
Problem with vectors in java toby New To Java 1 08-07-2007 07:56 AM


All times are GMT +3. The time now is 01:42 PM.


VBulletin, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright ©2006 - 2007, www.java-forums.org