比较ArrayList问题中的新整数对象

eri*_*cso 7 java integer arraylist

我存储的Integer对象表示我想要跟踪的对象的索引.稍后在我的代码中,我想检查特定对象的索引是否对应于我之前存储的那些整数之一.我这样做是通过创建一个ArrayList并从for循环的索引创建一个新的Integer:

ArrayList<Integer> courseselectItems = new ArrayList();

//Find the course elements that are within a courseselect element and add their indicies to the ArrayList
for(int i=0; i<numberElementsInNodeList; i++) {
    if (nodeList.item(i).getParentNode().getNodeName().equals("courseselect")) {
        courseselectItems.add(new Integer(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我想稍后检查ArrayList是否包含特定索引:

//Cycle through the namedNodeMap array to find each of the course codes
for(int i=0; i<numberElementsInNodeList; i++) {
    if(!courseselectItems.contains(new Integer(i))) {
        //Do Stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我使用new Integer(i)will 创建一个新的Integer时,我可以使用比较整数ArrayList.contains()吗?也就是说,当我使用创建新对象时new Integer(i),如果用于创建它们的int值相同,那么它是否与先前创建的Integer对象相同?

我希望我没有把它弄得太清楚.谢谢您的帮助!

cle*_*tus 18

是的,你可以使用它List.contains()作为使用equals()Integer支持,当与其他Integers 比较.

此外,由于自动装箱你可以简单地写:

List<Integer> list = new ArrayList<Integer>();
...
if (list.contains(37)) { // auto-boxed to Integer
  ...
}
Run Code Online (Sandbox Code Playgroud)

值得一提的是:

List list = new ArrayList();
list.add(new Integer(37));
if (list.contains(new Long(37)) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

永远返回,false因为一个Integer不是一个Long.这会使某些人在某些时候绊倒.

最后,尝试使您的变量作为接口类型的Java集合而不是具体类型,这样:

List<Integer> courseselectItems = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

ArrayList<Integer> courseselectItems = new ArrayList();
Run Code Online (Sandbox Code Playgroud)