gpt4 book ai didi

java - TreeMap 不返回所有键

转载 作者:行者123 更新时间:2023-12-02 06:45:46 25 4
gpt4 key购买 nike

我有一个要求,比如我需要根据属性文件条目上定义的某个序列对映射内的键进行排序。因此,输出应该根据用户在属性条目上定义的序列进行排序。为此,我尝试了使用 TreeMapComparator

我的属性文件条目是

seq=People,Object,Environment,Message,Service

以下是我的代码:

Properties prop=new Properties();
prop.load(new FileInputStream("D:\\vignesh\\sample.properties"));
final String sequence=prop.getProperty("seq");
// Display elements
final String sequence=prop.getProperty("seq");
System.out.println("sequence got here is "+sequence);
//Defined Comparator
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String key1, String key2) {
return sequence.indexOf(key1) - sequence.indexOf(key2);
}
};
SortedMap<String,String> lhm = new TreeMap<String,String>(comparator);
// Put elements to the map
lhm.put("Object", "biu");
lhm.put("Message", "nuios");
lhm.put("Service", "sdfe");
lhm.put("People", "dfdfh");
lhm.put("Environment", "qwe");
lhm.put("Other", "names");
lhm.put("Elements", "ioup"); //Not showing in output
lhm.put("Rand", "uiy"); //Not showing in output
//Iterating Map
for(Entry<String, String> entry : lhm.entrySet()) {
System.out.println(entry.getKey());
}

输出

sequence got here is People,Object,Environment,Message,Service
Other
People
Object
Environment
Message
Service

现在我对这段代码有一些问题。

  • 我的 map 中有近 8 个元素。但输出仅显示 6 个elements.为什么最后两个元素没有出现?

  • 与序列不匹配的值位于顶部
    现在。我想把它们放在底部。有办法吗?

  • 这里我声明了从属性文件中读取的字符串作为final,这样我就不能每次都更改属性。当我
    删除最终标识符,它在我的 IDE 中显示错误。我怎样才能
    避免这种情况吗?

  • 我在 HashMap 中的键可能不完全等于属性条目
    所以我需要检查该序列是否包含在我的HashMap key。我需要为此更改我的比较器吗?

最佳答案

并不是你的元素没有打印出来,而是它们没有添加到 map 中!

在排序后的 map 中,您有:

A sorted map performs all key comparisons using its compareTo (or compare) method, so two keys that are deemed equal by this method are, from the standpoint of the sorted map, equal.

但是一个映射不能有两个相等的键:

A map cannot contain duplicate keys; each key can map to at most one value.

但是当将 ElementOther 进行比较时,您的比较器返回零。它认为这两个字符串相等,因此最新的字符串不会添加到 map 中。

按照 SortedMap 的 javadoc 中的建议:

ote that the ordering maintained by a sorted map (whether or not an explicit comparator is provided) must be consistent with equals if the sorted map is to correctly implement the Map interface.

所以我建议你确保当你的比较器返回 0 时,这是因为比较的两个元素确实相等。一个非常“天真的”方法是:

Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String key1, String key2) {
int returned = sequence.indexOf(key1) - sequence.indexOf(key2);

if (returned == 0 && !key1.equals(key2))
returned = -1;

return returned;

}
};

关于java - TreeMap 不返回所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653325/

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