Java ArrayList如何包含方法工作?
我怀疑ArrayList contains方法是如何工作的。让我们举一个例子:Java ArrayList如何包含方法工作?,java,object,arraylist,equals,primitive,Java,Object,Arraylist,Equals,Primitive,我怀疑ArrayList contains方法是如何工作的。让我们举一个例子: List<String> lstStr = new ArrayList<String>(); String tempStr1 = new String("1"); String tempStr2 = new String("1"); lstStr.add(tempStr1); if (lst.contains(tempStr2)) System.out.println("conta
List<String> lstStr = new ArrayList<String>();
String tempStr1 = new String("1");
String tempStr2 = new String("1");
lstStr.add(tempStr1);
if (lst.contains(tempStr2))
System.out.println("contains");
else
System.out.println("not contains");
List lstStr=new ArrayList();
字符串tempStr1=新字符串(“1”);
字符串tempStr2=新字符串(“1”);
lstStr.add(tempStr1);
如果(第一个包含(临时2))
System.out.println(“包含”);
其他的
System.out.println(“不包含”);
它返回“notcontains”
另一个例子:
List<LinkProfileGeo> lst = new ArrayList<LinkProfileGeo>();
LinkProfileGeo temp1 = new LinkProfileGeo();
temp1.setGeoCode("1");
LinkProfileGeo temp2 = new LinkProfileGeo();
temp2.setGeoCode("1");
lst.add(temp1);
if (lst.contains(temp2))
System.out.println("contains");
else
System.out.println("not contains");
List lst=new ArrayList();
LinkProfileGeo temp1=新建LinkProfileGeo();
temp1.设置地理代码(“1”);
LinkProfileGeo temp2=新的LinkProfileGeo();
temp2.设置地理代码(“1”);
第一次添加(临时1);
如果(第一阶段包含(第二阶段))
System.out.println(“包含”);
其他的
System.out.println(“不包含”);
它返回包含。那么contains方法是如何工作的呢
谢谢您正在将字符串添加到列表中
lstStr
lstStr.add(tempStr1);
但是您在lst上使用的是contains
方法
if (lst.contains(tempStr2))
您的测试想法是正确的,因为contains
在内部使用equals
查找元素,因此如果字符串使用equals匹配,那么它应该返回true。但是您似乎使用了两个不同的列表,一个用于添加,另一个用于检查包含。您正在将字符串添加到列表lstStr
lstStr.add(tempStr1);
但是您在lst上使用的是contains
方法
if (lst.contains(tempStr2))
您的测试想法是正确的,因为contains
在内部使用equals
查找元素,因此如果字符串使用equals匹配,那么它应该返回true。但您似乎使用了两个不同的列表,一个用于添加,另一个用于检查包含内容。第二部分是以下内容的副本:
您需要重写equals方法以使其按您的意愿工作。第二部分是以下内容的副本:
您需要重写equals方法以使其按您的意愿工作。如果您感兴趣,这里是ArrayList
中的相关源代码。正如@user2777005所指出的,您的代码中有一个输入错误。您应该使用lstStr.contains()
,而不是lst.contains()
public int indexOf(对象o){
如果(o==null){
对于(int i=0;i如果您感兴趣,这里是ArrayList
中的相关源代码。正如@user2777005所指出的,您的代码中有一个输入错误。您应该使用lstStr.contains()
,而不是lst.contains()
public int indexOf(对象o){
如果(o==null){
对于代码第一部分中的(int i=0;i)
String tempStr1 = new String("1");
String tempStr2 = new String("1");
tempStr1
和tempStr2
都引用两个不同的字符串-2对象。之后,tempStr1引用的字符串对象通过codelstr.add(tempStr1);
添加到列表中。因此,列表中只有一个字符串对象由tempStr1
而不是tempStr2
引用。但是
contains();
方法处理equals()
方法。即lstStr.contains(temp2);
如果由temp2
引用的字符串对象的内容与添加到列表中的字符串对象的内容相同,则返回true;如果未找到匹配项,则返回false。此处lstStr.contains(temp2);
返回true,因为字符串对象temp2的内容等于添加到列表中的字符串对象temp1的内容。
但是在您的代码中,它被称为:
lst.contains(temp2);
这里使用的是不同的List
引用变量(lst
)而不是(lstStr
),这就是它返回false并执行else部分的原因
在代码的第二部分未定义setGeoCode()
。在代码的第一部分:
String tempStr1 = new String("1");
String tempStr2 = new String("1");
tempStr1
和tempStr2
都引用两个不同的字符串-2对象。之后,tempStr1引用的字符串对象通过codelstr.add(tempStr1);
添加到列表中。因此,列表中只有一个字符串对象由tempStr1
而不是tempStr2
引用。但是
contains();
方法处理equals()
方法。即lstStr.contains(temp2);
如果由temp2
引用的字符串对象的内容与添加到列表中的字符串对象的内容相同,则返回true;如果未找到匹配项,则返回false。此处lstStr.contains(temp2);
返回true,因为字符串对象temp2的内容等于添加到列表中的字符串对象temp1的内容。
但是在您的代码中,它被称为:
lst.contains(temp2);
这里使用的是不同的List
引用变量(lst
)而不是(lstStr
),这就是它返回false并执行else部分的原因
在代码的第2部分setGeoCode()
没有定义。如果您将示例修改为调用lstStr.contains
,它确实有效。(没有名为lst
的变量)我建议你删除这个问题,然后编辑它,然后在你有一个真正简短但完整的程序来演示这个问题时再删除它。第二部分是的副本:可能的副本如果你修复你的示例调用lstStr.contains
,它确实有效。(没有名为lst
的变量)我建议您删除这个问题,并对其进行编辑,然后在您有一个真正简短但完整的程序来演示该问题时取消删除。第二部分是字符串的副本:字符串的可能副本是Java库类,并且实现了正确的equals方法…字符串是Java库类,并且实现了正确的equals方法。。。