我正试图从预制排序的LinkedList中删除重复项,不允许我使用哈希集、集、映射、集合、节点、数组、索引等,只允许循环,我有点不知所措。我把代码搞得一团糟,但我要么抛出异常,要么删除所有内容。感谢您的帮助!这是我当前的代码:
private void duplicates() {
ListIterator<String> it = sorts.listIterator();
it.next();
while(it.hasNext()) {
String last = it.previous();
String nest = it.next();
if(last.equals(nest)) {
it.remove();
}
}
}
。。。从预制排序链接列表。
只要你能保证列表是真正排序的(不是排序的,而是真正排序的(,这会导致重复的元素相邻,你就可以简单地比较这两个邻居,如果它们不同,就进行移位。
仅循环
如果你的意思是"迭代",而不是循环(for-each
(,那么这是一种方法:
ListIterator<String> it = sortedCounties.listIterator();
String current = it.next(); // get a first element
while (it.hasNext()) {
String next = it.next(); // get another one
if (current.equals(next)) { // if equal
it.remove(); // .. remove the "next" element
} else {
current = next; // .. or else shift by one
}
}
因此,删除重复元素的基本思想是选择一个元素,并将其与其他元素进行比较,如果发现重复,则将其删除。
sudo代码:
currentElement = iterator1.next()
while iterator1.hasNext()
while iterator2.hasNext()
nextElement = iterator2.next()
if currentElement == nextElement
then remove nextElement
else
then nextElement = iterator2.next()
currentElement = iterator1.next()
您可以使用Java 8 Stream API来完成这种任务
private void unduplicate() {
sortedCounties = sortedCounties.stream()
.distinct()
.collect(Collectors.toCollection(LinkedList::new));
}