我使用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
答案 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)
捕获异常并正确处理它,它表示该索引没有元素。