相关疑难解决方法(0)

LinkedHashSet .equals()vs LinkedList .equals()具有相同的元素但顺序不同

考虑以下SSCCE:

public static void main(String[] args) {
    LinkedHashSet<String> set1 = new LinkedHashSet<>();
    set1.add("Bob");
    set1.add("Tom");
    set1.add("Sam");
    LinkedHashSet<String> set2 = new LinkedHashSet<>();
    set2.add("Sam");
    set2.add("Bob");
    set2.add("Tom");

    System.out.println(set1);
    System.out.println(set2);
    System.out.println(set1.equals(set2));
}
Run Code Online (Sandbox Code Playgroud)

这打印:

[Bob, Tom, Sam]
[Sam, Bob, Tom]
true
Run Code Online (Sandbox Code Playgroud)

然而,如果你LinkedHashSet改为LinkedList:

public static void main(String[] args) {
    LinkedList<String> set1 = new LinkedList<>();
    set1.add("Bob");
    set1.add("Tom");
    set1.add("Sam");
    LinkedList<String> set2 = new LinkedList<>();
    set2.add("Sam");
    set2.add("Bob");
    set2.add("Tom");

    System.out.println(set1);
    System.out.println(set2);
    System.out.println(set1.equals(set2));
}
Run Code Online (Sandbox Code Playgroud)

它产生:

[Bob, Tom, Sam]
[Sam, Bob, Tom]
false
Run Code Online (Sandbox Code Playgroud)

我的问题是澄清.有人可以帮助理解这个吗?为什么一个LinkedHashSet被认为是平等的,而同样的LinkedList呢?我假设定义List …

java collections linked-list equals linkedhashset

8
推荐指数
1
解决办法
1868
查看次数

LinkedHashMap Java 8 的 JUnit 顺序

我需要检查两个地图的完全相等性,包括它们的顺序

@Test
    public void test(){
        Map<String, Integer> actual = new LinkedHashMap<>();
        actual.put("longer", 1);
        actual.put("first", 1);
        actual.put("thebiggest", 1);

        Map<String, Integer> expected = new LinkedHashMap<>();
        expected.put("thebiggest", 1);
        expected.put("longer", 1);
        expected.put("first", 1);

        System.out.println("===expected");
        expected.entrySet().stream().forEach(n->System.out.println(n.getKey()));
        System.out.println("===actual");
        actual.entrySet().stream().forEach(n->System.out.println(n.getKey()));

        assertEquals(expected, actual);
        assertTrue(expected.equals(actual));
    }
Run Code Online (Sandbox Code Playgroud)

所有测试均通过,控制台输出:

===expected
thebiggest
longer
first
===actual
longer
first
thebiggest
Run Code Online (Sandbox Code Playgroud)

文档中到处都写到 LinkedHashMap 保持插入顺序。那么为什么两个相同但不同的有序映射的断言给出 true 呢?如果平等顺序很重要,我应该采取什么地图?

java junit

2
推荐指数
1
解决办法
2559
查看次数

标签 统计

java ×2

collections ×1

equals ×1

junit ×1

linked-list ×1

linkedhashset ×1