小议map排序问题
2014-02-15 12:16
148 查看
map有序无序?如果说有序, 这个顺序是怎么定义的? 安装put的先后顺序吗? 还是被put元素的内容呢?
经观察,应该是后者,跟put先后顺序无关, 跟内部实现有关(可能是hash排序的, 非大小排序)
打印 :{201=b, 101=b, 205=b}
如果是
map.put("205", "b");
map.put("101", "b");
map.put("201", "b");
(把205改成25)
则打印:
{201=b, 101=b, 25=b}
而且发现ConcurrentHashMap和HashMap的表现也不同 —— 内部的hash算法还有细节上的区别吗?
===============
参照http://kenkao.iteye.com/blog/1812283
List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.
小结:
1 List按对象进入的顺序保存对象, Set、 Map不是它们各有内部排序算法
2 List容许有重复值, Set不容许; Map不容许有重复key值。
3 List、Set、 Map各自的不同实现,效率有所不同,侧重不同
4对于存储于Set内的元素x,我们需要对x重写其hashCode方法——我们在重写对象的equals方法时,必须重写hashCode——就是说,equals不等,则hashCode不同,反之亦然
—— 这个Set 或者 HashSet好像用的很少吧,我工作这么久都没用过一样。。。
一般就是ArrayList、HashMap。。。
经观察,应该是后者,跟put先后顺序无关, 跟内部实现有关(可能是hash排序的, 非大小排序)
public static void main(String[] args) { // asfd(); // TODO Auto-generated method stub Map<String, String> map = new ConcurrentHashMap<String, String>(); // map.put("10.167.240.78", "aa"); // map.put("10.167.240.61", "bb"); // map.put("10.167.240.46", "dd"); // map.put("10.167.240.54", "cc"); map.put("205", "b"); map.put("101", "b"); map.put("201", "b"); for (int i = 10; i > 0; i--) { // map.put(i+"", Math.random()+""); } System.out.println(map); }
打印 :{201=b, 101=b, 205=b}
如果是
map.put("205", "b");
map.put("101", "b");
map.put("201", "b");
(把205改成25)
则打印:
{201=b, 101=b, 25=b}
而且发现ConcurrentHashMap和HashMap的表现也不同 —— 内部的hash算法还有细节上的区别吗?
===============
参照http://kenkao.iteye.com/blog/1812283
List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.
小结:
1 List按对象进入的顺序保存对象, Set、 Map不是它们各有内部排序算法
2 List容许有重复值, Set不容许; Map不容许有重复key值。
3 List、Set、 Map各自的不同实现,效率有所不同,侧重不同
4对于存储于Set内的元素x,我们需要对x重写其hashCode方法——我们在重写对象的equals方法时,必须重写hashCode——就是说,equals不等,则hashCode不同,反之亦然
—— 这个Set 或者 HashSet好像用的很少吧,我工作这么久都没用过一样。。。
一般就是ArrayList、HashMap。。。
相关文章推荐
- 对map创建出来的值顺序排序问题
- 引用 Map 数据结构的排序问题
- Map排序问题
- java中map的排序问题
- 笔记 freemark list标签迭代Map<Map<String,Object>集合排序问题
- 关于map的数据排序问题(hashmap,treemap)
- 关于mybatis返回map是排序问题
- 记录一下结构体排序的问题(vector,map)
- Map排序问题(有序或者无序)
- 涉及到的map按value排序问题
- Map排序问题
- c++ map的排序问题
- 关于map中含数字string的排序问题
- 关于map中含数字string的排序问题
- [置顶] Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
- C++中map的排序问题
- 关于map的排序问题
- 关于Map的排序问题
- map按value排序的问题
- Map转成JSON数据,根据key排序问题