使用多种数据类型搜索ArrayList

时间:2012-11-26 19:58:03

标签: java arrays arraylist

我有一个包含Stringintdouble的ArrayList,共有20个元素。

我试图将Strings移动到String数组,将ints移动到int数组,将doubles移动到双数组。但是我无法弄清楚这是怎样的,这就是我对整数整理的看法:

    private ArrayList <Object> randomList = new ArrayList <Object>();
    private int [] intArray = new int[10];

    public void example(){
    createArray();
    for(int i = 0; i<randomList.size();i++){
        if(randomList.get(i)instanceof Integer){
            intArray[i]= (Integer) randomList.get(i);
        }
    }
}

我无法理解为什么这个dosnt工作,它试图将不是Integers的对象添加到我的数组中导致outOfBounds异常,因为它试图添加10个以上的元素。

5 个答案:

答案 0 :(得分:2)

你有索引不匹配,就是这样。尝试类似:

int index = 0;

for(int i = 0; i<randomList.size();i++)
{
        if(randomList.get(i)instanceof Integer)
        {
            intArray[index++]= (Integer) randomList.get(i);
        }
}

您还应检查特定数组的当前索引是否小于上限,即该数组的初始大小:

if(randomList.get(i) instanceof Integer && index < intArray.length)

答案 1 :(得分:0)

您需要为每个输出数组维护一个单独的索引。

答案 2 :(得分:0)

首先,你应该永远不要让所有这些数据类型聚集在对象的ArrayList上。但如果你已经拥有它们:

for(Object o : randomList)
{
    if(o instanceof Integer)
    {
        //add to inteeger list
    }
    else if(o intenaceof String)
    {
       //add to string list
    }
    //...etc
}

答案 3 :(得分:0)

  1. 尝试将数组初始化为:

    private int [] intArray = new int[randomList.size()];
    
  2. 尝试使用另一个索引为数组赋值:

    int count=0;
    for(int i = 0; i<randomList.size();i++){
        if(randomList.get(i)instanceof Integer){
           intArray[count++] = (Integer) randomList.get(i);
        }
    }        
    
  3. 最后,您可能希望使用System.arraycopy截断未使用的数组片段,如下所示:

    private int [] finalArray= new int[count;
    System.arraycopy(intArray, 0, finalArray, 0, count);
    

答案 4 :(得分:0)

private int [] intArray = new int[10];

您的数组大小为10,但您的列表没有大小限制。

private int [] intArray = new int[randomList.size()];

可能有用。