Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList如何包含方法工作?_Java_Object_Arraylist_Equals_Primitive - Fatal编程技术网

Java ArrayList如何包含方法工作?

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

我怀疑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("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方法。。。