java - 谁能解释一下它是如何工作的,而没有按排序顺序重复?

标签 java

我的列表中有重复的数据,我知道 Set 不允许重复,LinkedHashSet 会给出排序顺序,它在内部会如何工作,有人可以解释一下吗?

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashSet;
 import java.util.List;

public class RemoveDuplicate {
public static void main(String[] args) {
    List<String> sourceList = new ArrayList<String>();

    sourceList.add("object1");
    sourceList.add("object2");
    sourceList.add("object2");
    sourceList.add("object3");
    sourceList.add("object4");
    sourceList.add("object2");

    List<String> newList = new ArrayList<String>(new LinkedHashSet<String>(
            sourceList));
    Iterator<String> it = newList.iterator();
    while (it.hasNext()) {
        System.out.println(it.next());
    }

   }
}

上面的代码显示列表没有重复并且有排序顺序。 LinkedHashSet 内部如何工作有人能解释一下吗?

最佳答案

LinkedHashSet 扩展 HashSet。查看HashSet源码herehere

HashSet uses the internal map to store your value as key, and if key is already exist(means you value already in set) then the call leaves the set unchanged and returns false.

请参阅 HashSet 中的以下代码:

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

关于java - 谁能解释一下它是如何工作的,而没有按排序顺序重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29792138/

相关文章:

java - JTextField 在文本更新后响应按键事件

java - 这个小程序适合您吗?

java - 使用 Play 的 Selenium 标签验证名称中包含点 (.) 的元素

java - 将 Jackson 的 @JsonGetter 与 Lombok 的 @Getter 结合起来

java - 如何在 Java 中并发处理 Collection 中的元素

java - 如何在 JavaFX 中重新着色图像

java - 为什么当我使用实例方法返回另一个对象时,我当前的对象被修改了? - java

java - 我应该期望循环链表队列向后打印吗?

java - Spring - 所有的 bean 都被处理了吗?

java - instanceof 被认为是有害的?