关于HashMap的排序

maowu 2004-03-15 11:45:50
我现在有一个HashMap,
我想根据里面的key的排序(key已经实现Comparable)
按顺序逐一取出每个Object,
有什么比较高效的方法?
...全文
96 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
maowu 2004-03-16
  • 打赏
  • 举报
回复
实践结果:

HashMap map = new HashMap();
map.put("1", "1");
map.put("3", "3");
map.put("2", "2");
map.put("4", "4");

Iterator iterator = map.keySet().iterator();

while(iterator.hasNext()){
Object key = iterator.next();
Object obj = map.get(key);
System.out.println(obj);

}

System.out.println("---------------------------");

Object[] key = map.keySet().toArray();
Arrays.sort(key);

for (int i = 0; i < key.length; i++) {
System.out.println(map.get(key[i]));
}


运行上面的程序后打印的结果是


3

2

4

1

---------------------------

1

2

3

4

明显,加入的在hashmap里的排序跟key对象的Comparable没有任何关系.
maowu 2004-03-16
  • 打赏
  • 举报
回复
虎猫,真的吗?我不知道哦.我试试看.
simonhappy 2004-03-15
  • 打赏
  • 举报
回复
取出Key的集合,然后调用Arrays.sort()
追求自由 2004-03-15
  • 打赏
  • 举报
回复
treeMap按自然顺序,如果你按它默认的构造方法构造的话。
LinkedHashMap是按你加入的顺序。
另外:
如果你要记录map加入的顺序,配合LinkedList使用。
把标识放到list里!!!
取的时候按list的顺序从
map里取~~~~

duracell 2004-03-15
  • 打赏
  • 举报
回复
最简单的就用
Map new_map = new TreeMap(now_map);
就已经排好序了
maowu 2004-03-15
  • 打赏
  • 举报
回复
稳定排序 是什么?
我看看SortedMap先.
maowu 2004-03-15
  • 打赏
  • 举报
回复
Map是别人传过来的,
我可以转化给set或者Collection,
但是我不知道怎么对set进行排序....
topglory 2004-03-15
  • 打赏
  • 举报
回复
首先你要明白自己的排序需不需要稳定排序

另外有一个SortedMap,我也没用过,你可以看看java API文档

我相信使用它会比排序更高效,它应该是插入元素时按顺序插入
wy7861 2004-03-15
  • 打赏
  • 举报
回复
HashMap本身并不适合排序,也就是说如果你要排序的话,最好不要用HashMap~~

如果要用,可以从HashMap中得到Collection来排序~~
yjsyjs 2004-03-15
  • 打赏
  • 举报
回复
自己重载数据接口的sort,用二分法
jerrygui 2004-03-15
  • 打赏
  • 举报
回复
up,我有同样的问题;
bingziyu 2004-03-15
  • 打赏
  • 举报
回复
你们说的Comparable是什么意思?
我看了好长时间也没搞清楚,听说他可以自己规定比较方法,
但是怎么用啊?
wushicnn 2004-03-15
  • 打赏
  • 举报
回复
实现Comparable后,在插入元素时,已经按照Comparable排序了,迭代取出元素有什么问题?
maowu 2004-03-15
  • 打赏
  • 举报
回复
Map mapModifyied = getMap();
Object[] key = mapModified.keySet().toArray();
Arrays.sort(key);

这样经过了两次转换:Map --> Set , Set --> Object[],
是不是很浪费?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧