如果对象存在于特定索引处,如何在Java中进行测试?

时间:2012-01-31 12:55:15

标签: java arraylist

我使用Arraylist并将Objects插入特定的索引。(例如,索引为0和2的元素,但它不是索引为1)我想知道我是否应该使用Arraylist.add(id,obj)或{ {1}}。我使用以下测试Arraylist.set(id,obj),但它一直抛出Exception out of bounds。我该怎样/应该测试它?

if(Arraylist.get(t.imgIdx) == null)

感谢 Csabi

5 个答案:

答案 0 :(得分:3)

如果要测试对象是否在某个位置,请使用IndexOf()。如果对象不在列表中,则此方法返回-1。

更新

在你的新代码上:

public static int GiveBackAverageID(Vector<DMatch> lista){

    ArrayList<CMatch> workingList = new ArrayList<CMatch>();

    for (DMatch t : lista){
        if(t.imgIdx >= workingList.size() || t.imgIdx < 0)
        {
            // do something with wrong indices.
        }
        else
        {
            if(workingList.get(t.imgIdx) == null){
                workingList.add(t.imgIdx, new CMatch(t.imgIdx,t.distance,1));
            }else{
                CMatch pom = workingList.get(t.imgIdx);
                pom.setSummaDist(pom.getSummaDist()+t.distance);
                pom.setCount(pom.getCount()+1);
                workingList.set(t.imgIdx, pom);
            }
        }
    }
}

或者您还可以做的是,在workingList中生成更多容量:

public static int GiveBackAverageID(Vector<DMatch> lista){

    // Creating more capacity in the constructor!
    ArrayList<CMatch> workingList = new ArrayList<CMatch>(lista.size());

    for (DMatch t : lista){
        if(workingList.get(t.imgIdx) == null){
            workingList.add(t.imgIdx, new CMatch(t.imgIdx,t.distance,1));
        }else{
            CMatch pom = workingList.get(t.imgIdx);
            pom.setSummaDist(pom.getSummaDist()+t.distance);
            pom.setCount(pom.getCount()+1);
            workingList.set(t.imgIdx, pom);
        }
    }
}

作为更好的选择,我会改用 HashTable<int,DMatch>

答案 1 :(得分:1)

使用set替换特定索引,并添加以在末尾添加对象,并添加索引值以在对象处插入对象并将其他元素向右移动(向其索引添加一个)。

超出界限异常意味着你的索引值可能很大;或者arraylist没有像你期望的那样填充。发布完整的异常/代码以获得完整的答案。

答案 2 :(得分:1)

在尝试插入之前,您需要检查列表的大小。如果索引小于列表大小,那么你应该检查它是否为null,否则,你总是想添加一个新元素

答案 3 :(得分:1)

我认为代码的问题是t.imgIdx值有时大于数组大小。

但是当您访问元素(应该为null)时,就像您所做的代码一样  if(workingList.get(t.imgIdx) == null),如果传递给get()的参数小于数组的大小,则if条件将返回布尔值。

您可以尝试以下示例并将不同的参数值传递给get()方法。

public static void main(String[] args) {

    ArrayList al = new ArrayList();
    al.add(0, "5");
    al.add(1, "10");
    al.add(2, "15");
    al.add(3, "20");

    al.set(1, null);//setting the element at index 1 to NULL.
    //al.remove(1);//removes the element in list so that the next element's index decreases by 1. 

    if(al.get(1) == null){
        System.out.println("Nothing here..");//this line executes
    }
    else
        System.out.println(al.get(1));

}

答案 4 :(得分:0)

捕获异常并正确处理它,它表示该索引没有元素。