Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

Indexing ArrayLists of Vectors (AL[i] = new vector();)

Posted on 2007-04-01
5
205 Views
Last Modified: 2010-03-31
Is it possible to index ArrayLists?  I want to have a number of ArrayLists each consisting of a vector....

ArrayList al = new ArrayList();
for (int k=0; k<Bins;k++)
{
   al[k] = new vector();
   for (int l=k*Binsize;l<(k*Binsize)+Binsize;l++)
   {
      al[k].add(Entry[l]);
   }
}

To attempt to clarify the above, Entry[] is an array of integers.  I want to split that array up into 'Bins', each of which consists of a vector of entries from the array.  So, if Entry[6] = {1 2 3 4 5 6), and I want 3 Bins, I want to create 3 ArrayLists consisting of vectors so that al[0] is a vector {1 2}, al[1] is a vector {3 4} and al[2] is a vector {5 6}.  I want to use vectors because I'll be doing a lot of mathematical comparison and merging and vectors/ArrayLists seem like the friendliest animals to manipulate in this way.  

If I haven't confused you to the point of causing you to scream at your monitor and throw things at your pets, I'd greatly appreciate any help.  Thanks.

Jason
0
Comment
Question by:cdromes
  • 3
  • 2
5 Comments
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18833045
Yes, that's possible. Here is an example with Integers. It uses generics pretty intensive, that's because it's easier to write. I can write the same without generics...

import java.util.*;

public class Example
{
    public static void main(String[] args)
    {
        int[] values = new int[]{1,2,3,4,5,6};

        //Number of bins and bin size
        int binCount = 3;
        int binSize = 2;

        //Bin holder
        ArrayList<Vector<Integer>> all = new ArrayList<Vector<Integer>>();

        //Create bins
        for(int i=0;i<binCount;i++)
        {
            //Create vector
            Vector<Integer> vec = new Vector<Integer>();

            //Fill vector
            for(int k=0;k<binSize;k++)
                vec.add(values[i*binSize+k]);

            //Add new vector
            all.add(vec);
        }

        //Print result
        for(Vector<Integer> vec : all)
        {
            System.out.print("{ ");
            for(Integer val : vec)
                System.out.print(val+" ");
            System.out.println("}");
        }
    }
}

Mark
0
 

Author Comment

by:cdromes
ID: 18833128
Thanks for the quick reply.

In your example, how would I go about accessing the 3rd entry in the 2nd vector in the ArrayList all?  I need to do element-by-element comparisons of neighboring vectors...would something like the following be kosher:

 for (k = 0; k < binCount; k++)
{
      myArrayList.add(new Vector());
      myArrayList.get(k);
      for (l =k*Binsize;l<(k*Binsize)+Binsize;l++)
            myArrayList.get(k).add(work[l]);    
}
Then once you've filled the vectors in the ArrayList, can you compound the .get, to specify vector elements, i.e. myArrayList.get(k).get(vectorElement); ?  
0
 
LVL 10

Accepted Solution

by:
ADSLMark earned 175 total points
ID: 18833142
Not sure if the code you posted works, but if it does the job, then it's kosher. :-)

>> Can you compound the .get, to specify vector elements, i.e. myArrayList.get(k).get(vectorElement); ?  

Yes.

Mark
0
 

Author Comment

by:cdromes
ID: 18834054
Spec-friekin'-tacular.  I threw the code in a tested it a couple little files and it worked like a champ.  Thanks, Mark.

Finally, how do I test for the existence of a vector in the ArrayList prior to doing comparison actions?  I'm thinking of something along the lines of

for (int g=0;g<AL.size();g++)
{
      //If this IF is false, then you're at the end of the List
      //You'll have already computed the Chi2 value for this vector, i, with its neighbor, i-1
      if (AL.get(g+1) != null)
      {
      ....
      }
}
0
 
LVL 10

Expert Comment

by:ADSLMark
ID: 18834653
This will only loop over the vectors inside the AL list.

for (int g=0;g<AL.size();g++)
{
AL.get(g);
}

You can also use an Iterator here:
Iterator iAL = AL.iterator();
while(iAL.hasNext())
{
Vector vec = (Vector) AL.next();
}

Mark
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
session migration servlets 2 42
String array comparison 4 38
going to wrong jsp page 2 33
Eclipse Java import and method not resolved 4 48
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

856 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question