import java.util.*;
public class list<E> extends LinkedList<E> {
int j=0;
int l=0;
LinkedList Search(Object o) {
int[] array=new int[super.size()];
for(int i=0; i<super.size(); i++) {
if(o.equals(super.get(i))) {
array[j]=i;
j=j+1;
continue;
}
}
return Arrayfilter(array);
}
private LinkedList Arrayfilter(int[] i) {
int[] aray=null;
LinkedList<Integer> ll= new LinkedList<Integer>();
for(int j:i){
if((l==0)|(j!=0)){
ll.add(j);
l=l+1;
continue;
}
}
return ll;
}
boolean deleteduplicate() {
for(int l=0; l<super.size(); l++){
for(int i:Search(super.get(l))) {
super.remove(i);
}
}
return true;
}
}
每当我尝试该方法删除重复项((时,它都会给我索引越界错误,我如何修改它返回 true 的方法
我知道每当我在 for 循环中删除任何内容时,我都会减小给我带来错误的列表的大小,或者其他任何东西?
如果你使用LinkedHashSet<E>
而不是LinkedList,你可以免费获得它。
要保留您的代码,您可以使用:
void deleteduplicate() {
Set<E> tmp = new LinkedHashSet<>(this);
this.clear();
this.addAll(tmp);
}
按照[此问题]中的示例进行操作。(如何从数组列表中删除重复的元素?
您可以使用 Set 来跟踪重复项,并使用 listIterator(( 遍历链表,如下所示
public LinkedList<E> deleteDuplicate(LinkedList<E>list)
{
Iterator<? extends E> it=list.listIterator();
Set<E> set = new HashSet<>();
while(it.hasNext())
{
E e=it.next();
if(set.contains(e))
it.remove();
else
set.add(e);
}
return list;
}
编辑:
public LinkedList<E> deleteDuplicate(LinkedList<E>list)
{
Iterator<? extends E> it=list.listIterator();
Set<E> set = new HashSet<>();
while(it.hasNext())
{
E e=it.next();
if(!set.add(e))
it.remove();
}
return list;
}