我一直在做一项任务,该任务允许用户将对象输入到LinkedList中,并删除它们。我已经把我的程序的所有方面都弄清楚了,除了这个讨厌的部分。。。删除重复项。我已经做了一段时间了,希望有人能给我指明正确的方向。
我在下面的代码几乎可以运行。。。因为它确实删除了重复项。。。但仅限于它遇到的第一个元素。那么,我如何允许程序查看第一个项目,删除它的重复项,然后返回并对列表中的所有其他元素执行同样的操作?我应该使用像"先前"one_answers"当前"这样的节点,而不是现在的节点,并尝试以这种方式遍历LinkedList吗?我的教授曾暗示我需要两个while循环,但我尝试过的所有方法都不起作用。我应该把什么作为第二个参数,我假设,outer while循环?
非常感谢您的帮助,谢谢!
public void removeDuplicate() //searches the LinkedList for duplicate elements, and removes them
{
ListIterator iter = listIterator();
Object uniqueO = iter.next();
while (iter.hasNext())
{
String uniqueS = (String) uniqueO;
Object compareO = iter.next();
String compareS = (String) compareO;
int x = uniqueS.compareTo(compareS);
if (x == 0)
{
iter.remove();
}
}
} //end removeDuplicate
这应该是一种固定的方式。但如果你不想更改原始订单,这可能会有所帮助:
//在这里,您可以将set视为一个永远不允许重复的数据结构:(
public void removeDuplicate() //searches the LinkedList for duplicate elements, and removes them
{
ListIterator iter = listIterator();
HashSet tempSet = new HashSet();
while (iter.hasNext())
{
Object obj = iter.next();
if(tempSet.contains(obj))){
iter.remove();
}else{
tempSet.add(obj);
}
}
} //end removeDuplicate
如果空间不是问题,您可以始终将其复制到新列表中,在插入之前验证它是否尚未在新列表中:
public static LinkedList<Object> dedup(LinkedList<Object> original) {
LinkedList<Object> copy = new LinkedList<Object>();
for (Object o : original) {
if (!copy.contains(o)) {
copy.add(o);
}
}
return copy;
}
您已经说过,您已经有一个add
函数在工作,并且您可以很容易地为您的LinkedList
类实现一个简单的包含函数:
public boolean contains(Object o) {
ListIterator iter = listIterator();
while (iter.hasNext()) {
if (iter.next().equals(o)) {
return true;
}
}
return false;
}
private LinkedList<String> removeDups(LinkedList<String> linkedList){
for(int i=0; i<linkedList.size(); i++){
for(int j=i+1; j<linkedList.size(); j++){
if(linkedList.get(i).equals(linkedList.get(j))){
linkedList.remove(j);
}
}
}
return linkedList;
}
将其转换为Set,然后返回到List。2行代码。
也许这可以帮助您,
新建一个hashMap,并以链接节点的字符串值为键,在迭代列表时,检查hashMap中是否已经存在该键,如果存在,则将其删除。
import java.util.HashSet;
导入java.util.LinkedList;导入java.util.Iterator;
公共类DeleTuplicateNodeinLinkList{
public static void main(String[] args) {
LinkedList<Integer> myLL = new LinkedList<Integer>();
myLL.add(1231);
myLL.add(12);
myLL.add(12313);
myLL.add(123);
myLL.add(12313);
myLL.add(1);
myLL.add(1243242);
System.out.println(myLL);
myLL = deleteDups(myLL);
System.out.println(myLL);
}
private static LinkedList<Integer> deleteDups(LinkedList<Integer> myLL) {
// TODO Auto-generated method stub
HashSet<Integer> myHashSet = new HashSet<Integer>();
Iterator<Integer> itr;
itr = myLL.iterator();
while (itr.hasNext()) {
if (!myHashSet.add(itr.next())) {
itr.remove();
}
}
return myLL;
}
}