当前位置:  开发笔记 > 编程语言 > 正文

Java有序地图

如何解决《Java有序地图》经验,为你挑选了5个好方法。

在Java中,是否有一个对象用作存储和访问键/值对的Map,但是可以返回一个有序的键列表和一个有序的值列表,这样键和值列表的顺序相同?

因此,作为代码解释,我正在寻找像我的虚构OrderedMap一样的东西:

OrderedMap om = new OrderedMap<>();
om.put(0, "Zero");
om.put(7, "Seven");

String o = om.get(7); // o is "Seven"
List keys = om.getKeys();
List values = om.getValues();

for(int i = 0; i < keys.size(); i++)
{
    Integer key = keys.get(i);
    String value = values.get(i);
    Assert(om.get(key) == value);
}

dmeister.. 375

该SortedMap的接口(与实施TreeMap的)应该是你的朋友.

界面有以下方法:

keySet() 它以升序返回一组键

values() 它以相应键的升序返回所有值的集合

所以这个界面完全符合您的要求.但是,密钥必须具有有意义的顺序.否则,您可以使用LinkedHashMap,其中订单由插入顺序确定.



1> dmeister..:

该SortedMap的接口(与实施TreeMap的)应该是你的朋友.

界面有以下方法:

keySet() 它以升序返回一组键

values() 它以相应键的升序返回所有值的集合

所以这个界面完全符合您的要求.但是,密钥必须具有有意义的顺序.否则,您可以使用LinkedHashMap,其中订单由插入顺序确定.


要使用TreeMap,它需要密钥类必须实现Comparable接口.如果没有,那么将抛出某种RuntimeException.TreeMap它也是排序的地图,但我认为作者想要使用刚刚排序(未排序)的地图.LinkedHashMap是获得仅有序地图的好选择(正如你所说,"由插入顺序决定").
示例:SortedMap map = new TreeMap <>();

2> John Feminel..:

是否存在一个像Map一样的对象来存储和访问键/值对,但是可以返回一个有序的键列表和一个有序的值列表,这样键和值列表的顺序相同?

您正在寻找java.util.LinkedHashMap.您将获得Map.Entry 对的列表,它们总是以相同的顺序迭代.该顺序与放置项目的顺序相同.或者,使用java.util.SortedMap,其中键必须具有自然顺序或由a指定Comparator.


并且只是保存读者仔细检查这个,因为通过测试很难验证,`keySet()`方法有效地返回一个LinkedHashSet,它反映了`put()`调用的顺序.请注意,除非您事先"删除()"键,否则对同一个键重复调用`put()`将不会改变顺序.

3> VoNWooDSoN..:

LinkedHashMap维护键的顺序.

java.util.LinkedHashMap似乎就像普通的HashMap一样工作.



4> bruno conde..:

我认为你从框架中得到的最接近的集合是SortedMap


如果我认为值得失去积分,我会拒绝投票.正如上面的答案所指出的,你的答案缺乏关于LinkedHashMap的正确信息,对SortedMap的一点解释也会很好.

5> Vitalii Fedo..:

您可以利用可以按升序或降序键访问和遍历的NavigableMap接口。该接口旨在取代 SortedMap接口。通常,可导航地图是根据其键的自然顺序或在地图创建时提供的比较器进行排序的。

它有三个最有用的实现:TreeMap,ImmutableSortedMap和ConcurrentSkipListMap。

TreeMap示例:

TreeMap users = new TreeMap();
users.put("Bob", 1);
users.put("Alice", 2);
users.put("John", 3);

for (String key: users.keySet()) {
  System.out.println(key + " (ID = "+ users.get(key) + ")");
}

输出:

Alice (ID = 2)
Bob (ID = 1)
John (ID = 3)

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有