在Java中维护插入顺序的映射(集合)

15
我需要在一个安卓应用中使用Java的地图功能。但问题是,列表会自动排序。如何使用Maps以与插入数据时相同的顺序获取数据。

最好将标题重命名,以更好地反映您对维护插入顺序的地图感兴趣的事实。 - Nadir Muzaffar
哪个列表会自动排序?这是一个问题吗?还是它是你问题说明的一部分?问题仍不清楚。 - user207421
5个回答

27
你应该使用LinkedHashMap 来实现这个目的。访问Android DocsJava Docs 了解更多详情。

5

1
不仅如此,它还有一个简单的钩子来构建缓存。非常棒。 - Argyle

2

2

正如你和我发现的那样,LinkedHashMap并不是很有用。(它存在的意义是什么呢?)

我有一个哈希列表(从语义上讲,我认为它应该被称为hashedlist)

http://code.google.com/p/synthfuljava/source/browse/trunk/gwt/util/org/synthful/gwt/util/HashList.java

它有一个arraylist和一个hashmap。ArrayList存储键。

哈希列表.put(key, value)将执行以下操作

  • map.put(key, value)
  • 以及list.add(key)

哈希列表.get(int position)将执行 - map.get(list.get(position))

这是我在2003年编写的HashVector和HashTree类的简化版,当时我需要在Java中模拟javascript和xml对象,并保留它们的顺序。然而,我没有时间或必要简化hashtree以进行gwt序列化。

再想一想,GWT如何实现哈希映射?我认为当我有时间时,我需要用faststringmap替换hashmap。Google的faststringmap不是公开的。它是为GWT编译器私人使用而设计的。因此,您必须复制其代码并将其更改为公共类:http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/client/ui/FastStringMap.java

http://jectbd.com/?p=95

也许,GWT编译器会悄悄地使用它——我应该费心管理编译器,用faststringmap替换hashmap吗?

顺便说一句,

你仍然可以通过谷歌搜索“googlecode synthful hashtree”来寻找hashtree。

Hashtree允许您创建一个对象树,并允许您使用像路径一样的点约定xpath检索您的对象。

hashtree.get("hello.dolly.how.are.you");

分隔符可以重新指定,这样你就可以使用存储或获取。
hashtree.get("hello/dolly/how/are/you");
hashtree.put("hello/dolly/how/are/you", value);

1
似乎你不理解LinkedHashMap的目的,你期望它做什么? - M Platvoet
真的很好奇,LinkedHashMap 的哪个方面使其不适合 OP 的目的? - Nadir Muzaffar
linkedhashmap.insert(6, key, value)? linkedhashmap.remove(7)? linkedhashmap.put(20, key, value)? It does appear I don't understand the purpose of MS windows when I could use Linux.linkedhashmap.insert(6, key, value)?linkedhashmap.remove(7)?linkedhashmap.put(20, key, value)?看起来我不理解为什么要使用MS Windows,而不是使用Linux。 - Blessed Geek
2
@BlessedGeek 但这并不是回答问题所必需的。因此,LinkedHashMap 是完全有用的。通常一辆自行车就足够了,即使你拥有一辆适当的德国汽车。 - M Platvoet


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接