为什么等于和==&引用;当我想使用for循环从arrayList获取数据时,它不起作用? import java.util.ArrayList; 公共班机{ 公共静态void main(字符串[]args){ ArrayList=新建ArrayList(); 对于(int i=0;i
我有一个问题,当我想找到一个相等的n值时,为什么第二个循环返回false。当我使用“==”或“equals()”方法时也会发生同样的情况 当我使用集合方法“contains()”时,它正在工作,并返回“true”为什么等于和==&引用;当我想使用for循环从arrayList获取数据时,它不起作用? import java.util.ArrayList; 公共班机{ 公共静态void main(字符串[]args){ ArrayList=新建ArrayList(); 对于(int i=0;i,java,Java,我有一个问题,当我想找到一个相等的n值时,为什么第二个循环返回false。当我使用“==”或“equals()”方法时也会发生同样的情况 当我使用集合方法“contains()”时,它正在工作,并返回“true” 第二个问题,使用“contains()”从列表中获取数据(例如我的变量“n”)的最快方法是,还是有更好(更快)的方法?即使找到匹配项,也没有中断循环。找到匹配项后,如果不匹配,则在下一次迭代中重置contains=false 你也可以简化它 import java.util.Array
第二个问题,使用“contains()”从列表中获取数据(例如我的变量“n”)的最快方法是,还是有更好(更快)的方法?即使找到匹配项,也没有中断循环。找到匹配项后,如果不匹配,则在下一次迭代中重置
contains=false
你也可以简化它
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
Integer n = 5000000;
boolean contains = true;
for (int i = 0; i < 10000000; i++) {
if (list.get(i).equals(n))
contains = true;
else
contains = false;
}
System.out.println(contains);
contains = list.contains(5000000);
System.out.println(contains);
}
}
boolean contains=false;
对于(int i=0;i<10000000;i++){
if(list.get(i).equals(n)){
包含=真;
打破
}
}
顺便说一下,ArrayList包含的方法的时间复杂度为O(n),其中n是元素数。您可以使用HashSet,它没有任何顺序,但它只包含方法时间复杂性O(1)
例如:
boolean contains = false;
for (int i = 0; i < 10000000; i++) {
if (list.get(i).equals(n)) {
contains = true;
break;
}
}
HashSet=newhashset();
对于(int i=0;i<10000000;i++){
增加(i);
}
整数n=5000000;
System.out.println(set.contains(n));
因为即使i
等于n
并且contain
得到true
值,您在下一次迭代中再次将false
值分配给它,您也不应该使用else
:
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < 10000000; i++) {
set.add(i);
}
Integer n = 5000000;
System.out.println(set.contains(n));
import java.util.ArrayList;
公共班机{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
对于(int i=0;i<10000000;i++){
列表.添加(i);
}
整数n=5000000;
布尔包含=假;
对于(int i=0;i<10000000;i++){
if(list.get(i).equals(n))
包含=真;
打破
}
System.out.println(包含);
包含=列表。包含(5000000);
System.out.println(包含);
}
}
因为当您在其中找到元素时,不会停止循环。在下一次迭代中,您的contains变量可能再次设置为false。添加一个break代码>在contains=true之后代码>你是。如果你只需要知道元素在那里,你可以考虑使用一个集合或映射而不是一个列表。这会快得多。@chatton谢谢你的回答。我将从各种列表类型中了解数据访问。我认为当我寻找最快的方法时,遍历所有列表长度并不是一个好主意。“contains()”方法比循环快吗?或者可能有最快的方法吗?我总是觉得看源代码很有用。看看contains和indexOf方法。你必须初始化boolean contains=false代码>。否则,随着你的改变,你永远不可能变假。我犯了一个愚蠢的错误!谢谢大家的回答!现在对我来说很明显,我犯了一个愚蠢的错误。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
Integer n = 5000000;
boolean contains = false;
for (int i = 0; i < 10000000; i++) {
if (list.get(i).equals(n))
contains = true;
break;
}
System.out.println(contains);
contains = list.contains(5000000);
System.out.println(contains);
}
}