Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_List_Duplicates - Fatal编程技术网

Java 如何删除索引列表中的重复元素?

Java 如何删除索引列表中的重复元素?,java,list,duplicates,Java,List,Duplicates,我有这个方法: static <E> IndexedList<E> deleteRepeated(IndexedList<E> l) 静态索引列表删除重复(索引列表l) 并使用: IndexedList<E> list = new ArrayIndexedList<E>(); IndexedList list=new ArrayIndexedList(); 到目前为止,我的代码是这个,但它不工作 for (int i =

我有这个方法:

static <E> IndexedList<E> deleteRepeated(IndexedList<E> l)
静态索引列表删除重复(索引列表l)
并使用:

IndexedList<E> list = new ArrayIndexedList<E>();
IndexedList list=new ArrayIndexedList();
到目前为止,我的代码是这个,但它不工作

   for (int i = 0; i < l.size(); i++) {
    int repeated = 0;
    if (l.contains(l.get(i))) {
        repeated++;
        if (repeated < 1) {
            list.add(l.get(i));
        }
    }
}
return list;
for(int i=0;i

}

虽然可能不是性能最好的解决方案,但我会创建一个删除重复项(同时保留每个元素第一次出现的原始顺序)的列表,然后将其转换回
列表:

private List<String> removeRepeated(List<String> originalValues) {
    return new ArrayList<>(new LinkedHashSet<>(originalValues));
}
私有列表删除已创建(列表原始值){
返回新的ArrayList(新的LinkedHashSet(originalValues));
}

Java8:
list.stream().distinct().collect(Collectors.toList())

流文档:
首先要注意的是您的支票:

    if (l.contains(l.get(i)))
将始终返回true,因为您正在检查列表是否包含从该列表获取的元素。您需要检查新列表是否已包含该元素。而且不需要重复使用
变量

下面是如何为短列表(最多100个元素)执行此操作:


顺便说一下,我假设这是算法设计中的一个练习。在现实世界中,我们不会编写这样的代码,而是使用标准Java API提供的现有工具。

return list.stream().distinct().collect(Collectors.toList())什么是索引列表?它不是标准JavaAPI的一部分。索引列表(可通过整数索引访问)使用数组实现,为访问(get)和修改元素(set)提供了高效的操作。构造一个包含org参数元素的索引列表,其顺序相同。IndexedList类是否实现了java.util.list接口?否。如果IndexedList(无论是什么)实现了list,这将起作用。
    for (int i = 0; i < l.size(); i++) {
    if (!list.contains(l.get(i))) {
        list.add(l.get(i));
    }
    return list;
    Set<E> uniqueValues = new HashSet<>();
    for (int i = 0; i < l.size(); i++) {
    if (uniqueValues.add(l.get(i))) {
        list.add(l.get(i));
    }
    return list;