我刚开始学习Java中的ArrayList类。我在下面的代码中测试了ArrayList类及其方法:
import java.util.ArrayList;
public class NewArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> myList = new ArrayList<String>();
String s = new String();
myList.add(s);
String b = new String();
myList.add(b);
int theSize = myList.size();
System.out.println("ArrayList size: " + theSize);
boolean isTrue = myList.contains(s);
System.out.println(isTrue);
int whereIsIt = myList.indexOf(s);
System.out.println(whereIsIt);
int whereIsIt2 = myList.indexOf(b);
System.out.println(whereIsIt2);
}
}
indexOf
方法显示了对象的索引。因此,我向s
ArrayList对象引用添加了两个对象b
和myList
,它应该在索引中有2个对象。 whereIsit
和whereIsit2
的输出均为0
。不应该是0 1
??
答案 0 :(得分:10)
您正在向列表中添加两个具有相同值(空字符串)的String
个对象。
所以你的清单看起来像
["", ""]
然后您调用等效的indexOf("")
,其中indexOf(..)
使用Object#equals(Object)
方法来比较对象。列表中的第一个元素等于""
,因此返回索引。
旁注:
请记住,Java是通过价值传递的。变量并不重要。它是重要的参考价值。
答案 1 :(得分:0)
在使用http://docs.oracle.com/javase/7/docs/api/index.html?java/util/ArrayList.html
之前,请先阅读文档中的方法说明int indexOf(Object o)
Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.
和
public int lastIndexOf(Object o)
Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element. More formally, returns the highest index i such that (o==null ? get(i)==null : o.equals(get(i))), or -1 if there is no such index.
答案 2 :(得分:0)
在这里,您只需创建两个没有值的对象,因此它将被视为空字符串。所以Indexof将返回给定对象的第一次出现。
如果为s和b分配不同的值,那么结果会得到你期望的结果。请尝试使用以下代码。
String s = "String1";
myList.add(s);
String b = "String2";
myList.add(b);
int whereIsIt = myList.indexOf(s);
System.out.println(whereIsIt);
int whereIsIt2 = myList.indexOf(b);
System.out.println(whereIsIt2);