Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 从数组列表中删除元素的更有效方法_Java_Arraylist - Fatal编程技术网

Java 从数组列表中删除元素的更有效方法

Java 从数组列表中删除元素的更有效方法,java,arraylist,Java,Arraylist,我开发了一个类似这样的数组列表 ArrayList<String> list = new ArrayList<String>(); list.add("1"); list.add("8"); list.add("8"); list.add("3"); list.add("4"); 现在我的问题是:如果我想从列表中删除8,哪种方式更好 第一种方式: for(int i = 0; i < list.size(); i++) { if(list.get(i).e

我开发了一个类似这样的数组列表

ArrayList<String> list = new ArrayList<String>();
list.add("1");
list.add("8");
list.add("8");
list.add("3");
list.add("4");
现在我的问题是:如果我想从列表中删除8,哪种方式更好

第一种方式:

for(int i = 0; i < list.size(); i++) {
    if(list.get(i).equals("8")) {
        list.remove(i);
        i--;
    }
}
第二种方式:

Iterator<String> iterator = list.iterator();
    while(iterator.hasNext())
        if(iterator.next().equals("8"))
            iterator.remove();

现在请告诉我们,从性能的角度来看,哪种方法更高效、更快,还有没有其他类似于内置函数的方法?通过使用它,我们可以在不进行太多迭代的情况下删除重复项

如果您需要存储重复项,我建议您使用Map,其中第一个整数是键,第二个是键出现的次数。因此,当您添加已经存在的密钥时,只需增加相应的计数器。在删除操作中,您正在执行相反的操作。当您需要所有不同的值时,只需使用

如果您需要存储重复项,我建议您使用Map,其中第一个整数是键,第二个是键出现的次数。因此,当您添加已经存在的密钥时,只需增加相应的计数器。在删除操作中,您正在执行相反的操作。当您需要所有不同的值时,只需使用

如果您只需要一组数字,那么使用HashSet而不是列表。如果您需要保留输入数字的顺序,请使用LinkedHashSet。至于删除,请始终选择使用迭代器的版本,即使在您的特定情况下,性能可能相当。迭代器的习惯用法比索引更适用,例如,如果使用LinkedList,索引将导致灾难性的性能。

如果只需要一组数字,则使用HashSet而不是列表。如果您需要保留输入数字的顺序,请使用LinkedHashSet。至于删除,请始终选择使用迭代器的版本,即使在您的特定情况下,性能可能相当。迭代器的习惯用法比索引更适用,例如,如果使用LinkedList,索引将导致灾难性的性能。

从性能角度看,它们应该是相似的。你考过了吗? 如果要使用内置方法,可以使用类似的性能执行此操作。待测试确认:

list.removeAll(Arrays.asList("8"));

最后,如果您想要一个没有重复项的列表,请使用其他人提到的集合

性能方面,它们应该相似。你考过了吗? 如果要使用内置方法,可以使用类似的性能执行此操作。待测试确认:

list.removeAll(Arrays.asList("8"));

最后,如果您想要一个没有重复项的列表,请使用其他人提到的集合

添加到集合重复被删除添加到集合重复被删除这将比OP的代码性能差。list.remove每次都从列表的开头开始-在^2上,而不是在OP的On.list.removeAllCollections.singleton4上;这也是很好的,我认为它的性能不如OP的代码。list.remove每次都从列表的开头开始-在^2上,而不是在OP的On.list.removeAllCollections.singleton4上;我想这也很好