gpt4 book ai didi

java - 按值维护 SortedMap

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:53 24 4
gpt4 key购买 nike

正如我们所知,SortedMap 维护按键排序的条目。我在这个论坛上阅读了很多主题,看到了很多按值对 SortedMap 进行排序的示例。但是,正如您所知,当我将一个项目放入默认 SortedMap 时,它不会再次对 Map 进行排序,只是将这个新条目放在它应该在的位置。

例如,

SortedMap<String,Person> sortedMap = new TreeMap();
Person p1 = new Person("John",38);
sortedMap.put(p1.getName(), p1);
Person p2 = new Person("Tom",34);
sortedMap.put(p2.getName(), p2); // does not sort, maintains sorted set by comparing the other values
Person p3 = new Person("Susan",21);
sortedMap.put(p3.getName(), p3); // does not sort, maintains sorted set by comparing the other values

在这个论坛的许多线程中,我看到许多代码通过调用排序方法按值对 SortedMap 进行排序,例如:

sortedMap.sort(sortedMap.entries()); 

正在调用此方法或其他方法以获取已排序的值。

但是,我需要一个 Map 实现来保持值的排序,而无需调用排序方法,正如我在上面解释的那样。例如,在上面的代码中,我可以调用 firstKey() 方法;但我需要调用 firstValue() 方法。

Person minimumAgePerson = sortedMap.firstValue().
System.out.println(minimumAgePerson.getName()); // it should print "Susan"

SortedSet 不适合我的要求,因为我可以放置一些新的对象 (Person),其键值已经在映射中,这些刚刚添加的条目应该覆盖现有对象(所以我需要一个映射):

Person p4 = new Person("Susan",39);
sortedMap.put(p4.getName(),p4);
Person newMinimumAgePerson = sortedMap.firstValue();
System.out.println(newMinimumAgePerson.getName()); // it should print "Tom"

是否有实现此任务的实现,还是我需要自己实现 SortedSet?

最佳答案

通常,处理此类问题的最简单和最安全的方法是编写一个使用两个不同标准集合的类。该类可以准确提供您需要的方法,而不必符合任何 java.util 接口(interface)。

鉴于规定的要求,我将使用 SortedMap 来包含值,并结合 HashMap 将键映射到值。为了防止重复键,将键值对放入HashMap,检查放入结果。如果键已经存在,请在添加新值之前从 SortedMap 中删除旧值。

如果您有其他要求,这种特殊设计可能无法涵盖所有​​内容,但组合 java.util 结构的概念通常很有用。

关于java - 按值维护 SortedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545871/

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