gpt4 book ai didi

java - ConcurrentSkipListMap 是否对键修改进行排序? (以及其他自动排序结构)

转载 作者:行者123 更新时间:2023-12-01 12:27:59 24 4
gpt4 key购买 nike

假设我有一个 ConcurrentSkipListMap,我通过给它一个比较器来构造它,然后向其中添加几个键值对。当我向映射添加键时,根据设计,它会根据给定构造函数的比较器或其自然顺序对值进行排序。但是,如果我修改映射中包含的键之一,列表是否会自行重新排序?

即如果我有一张按名字排序的 map ,并添加了 “Alan”“Grace”,它看起来会像这样:

[0] "Alan"
[1] "Grace"

如果我随后更改 "Alan" -> "Turing" 列表会看起来像

示例A:

[0] "Turing"
[1] "Grace"

或者示例B:

[0] "Grace"
[1] "Turing"

此行为是否适用于任何其他自动排序数据结构?

最佳答案

似乎没有改变顺序:

public class TestMap implements Comparable<TestMap> {

private static int counter = 0;
private int count;

public TestMap() {
count = counter++;
}

@Override
public String toString() {
return count + "";
}

@Override
public int compareTo(TestMap o) {
return count - o.count;
}

public static void main(String[] args) throws Exception {
ConcurrentSkipListMap<TestMap, String> x = new ConcurrentSkipListMap<>();
TestMap a = new TestMap();
TestMap b = new TestMap();
x.put(a, "A");
x.put(b, "B");
System.out.println("Before");
for (Map.Entry<TestMap, String> entry : x.entrySet()) {
System.out.println("Key: " + entry.getKey() + " val: " + entry.getValue());
}

for (TestMap t : x.keySet()) {
if (t.count == 0) {
t.count = 5;
}
}
System.out.println("After");
for (Map.Entry<TestMap, String> entry : x.entrySet()) {
System.out.println("Key: " + entry.getKey() + " val: " + entry.getValue());
}
}
}

输出:

Before
Key: 0 val: A
Key: 1 val: B
After
Key: 5 val: A
Key: 1 val: B

关于java - ConcurrentSkipListMap 是否对键修改进行排序? (以及其他自动排序结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com