Map的排序问题

niujfox 2010-05-13 09:46:51
有个问题就是想让Map的keyset出来的key是按可以的put顺序显示出来的,哪个高手可以指点一下。
...全文
328 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
z86963 2011-08-25
  • 打赏
  • 举报
回复
LinkedHashMap 解决了 谢谢大家
xiaxinhuo 2010-05-13
  • 打赏
  • 举报
回复
如果用HashMap 他是key——value对应 没有先后顺序的
shine333 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 niujfox 的回复:]

LinkedHashMap可以,如果我想自定义一个map类,然后继承HashMap,怎么实现这个问题?
[/Quote]

其实,最好的例子就是LinkedHashMap
shine333 2010-05-13
  • 打赏
  • 举报
回复
LinkedHashMap是正解,如果想学习一下,下面有个简单例子。但仅供学习,有很多“漏洞”


public class Test<K, V> extends HashMap<K, V> {

private final Set<K> keys = new LinkedHashSet<K>();

// 还有很多方法要如此这般,比如remove, clear, putAll等等等,
// 当然还有HashMap(Map)这样的构造函数。
@Override
public V put(K key, V value) {
keys.add(key);
return super.put(key, value);
}

/**
* @return
* @see java.util.HashMap#keySet()
*/
@Override
public Set<K> keySet() {
return keys;
}

public static void main(String[] args) {
Map<String, String> map = new Test<String, String>();
map.put("123", "1234");
map.put("1234", "1234");
map.put("1", "1234");
map.put("12", "1234");
map.put("abc", "1234");
map.put("abcd", "1234");
map.put("xyz", "1234");
map.put("5555", "1234");
System.out.println(map.keySet());
}
}


另外,TreeMap是根据key大小而非进入的先后排序。
chy2012 2010-05-13
  • 打赏
  • 举报
回复
Map<Object,Object> hash = new HashMap<Object,Object>();
hash.put("a", "qqq");
hash.put("b", "www");
for(Object a :map.keySet())
{
System.out.print(" "+map.get(a));
}

试下这代码,学习下Map
libo_java 2010-05-13
  • 打赏
  • 举报
回复


package test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapTest {
public static void main(String[] args){
// Map map = new HashMap();
// Map map = new TreeMap<String, Integer>();
Map map = new LinkedHashMap();
map.put("5",1);
map.put("2",2);
map.put("3",3);
Iterator ite = map.keySet().iterator();
while(ite.hasNext()){
System.out.println(map.get(ite.next()));
}

}

}



用这个例子试试 就知道结果了
xiaohongboabcd 2010-05-13
  • 打赏
  • 举报
回复
学习了....以前和楼主遇到了同样的问题..
奔跑哥 2010-05-13
  • 打赏
  • 举报
回复
HashMap是乱序的,
TreeMap是排序的,

LinkedHashMap是按照插入顺序的,所以这个符合你的需求。
niujfox 2010-05-13
  • 打赏
  • 举报
回复
LinkedHashMap可以,如果我想自定义一个map类,然后继承HashMap,怎么实现这个问题?
dr_lou 2010-05-13
  • 打赏
  • 举报
回复
LinkedHashMap
aSysBang 2010-05-13
  • 打赏
  • 举报
回复
如果是先进先出的话
可以用 List<Map<String,String>> list = new ArrayList<HashMap<String,String>>();
hackerster0324 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hackerster0324 的回复:]

为什么用map,可以考虑用list然后原来在map中的东西抽象成一个类的属性。不久ok了。你的map就算你put进去了。
[/Quote]
后面没写完因为不知道对不对所以就没写,结果没有删除干净那就写上吧。
对于hashmap就算你put进去。然后超过一定的负载因子,也会重新排列一下hash的,不知道这个和顺序是否有关
hackerster0324 2010-05-13
  • 打赏
  • 举报
回复
为什么用map,可以考虑用list然后原来在map中的东西抽象成一个类的属性。不久ok了。你的map就算你put进去了。
focusforce 2010-05-13
  • 打赏
  • 举报
回复
LinkedHashMap
niujfox 2010-05-13
  • 打赏
  • 举报
回复
我输入的是key是第一周、第二周这类的,treemap怎么排?
xiesisi3 2010-05-13
  • 打赏
  • 举报
回复
key的类型是什么?Map本身就是无序的集合,要想有序可以考虑先把Map里面的数据存到List里面去.
hardycheng 2010-05-13
  • 打赏
  • 举报
回复
TreeMap就是有序的
lacus87 2010-05-13
  • 打赏
  • 举报
回复
LZ你既然要记录MAP的KEY进入的先后顺序,还是重新定义一个同步的LIST存储KEY吧

62,614

社区成员

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

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