map有序无序?如果说有序, 这个顺序是怎么定义的? 安装put的先后顺序吗? 还是被put元素的内容呢?

经观察,应该是后者,跟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排序问题的更多相关文章

  1. java List<Map> 排序问题

    Collections.sort(order_from_list, new Comparator<Map<Object, Object>>() { public int com ...

  2. java Map排序问题

    java 中,Map常见的有HashMap ,TreeMap等等,Map是一个接口,我们不能直接声明一个Map类型的对象,在实际开发 中,比较常用的Map性数据结构是HashMap和TreeMap,它 ...

  3. Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)

    背景 记录项目中遇到的 关于fastjson jsonobject转string乱序,string转jsonObject乱序问题的解决方案 fastJson issues 问题来源描述参见: http ...

  4. java map的默认排序问题

    import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Tre ...

  5. 对map创建出来的值顺序排序问题

    TreeMap 在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1.2.3.4但出来的结果可能是 3.2 ...

  6. 笔记 freemark list标签迭代Map<Map<String,Object>集合排序问题

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 工作中出现一个比较特殊的问题,在模板ftl文件中,一般用list迭代map 举例: 后台: // 传入的参数 ...

  7. fastjson排序 Map多层嵌套转换自动排序问题终极解决方案

    阅读更多 最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObjec ...

  8. STL Map的使用

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力.下面就通过示例记录一下map的使用: 一.向map中 ...

  9. c++ list, vector, map, set 区别与用法比较

    http://blog.csdn.net/alex_xhl/article/details/37692297 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于ve ...

随机推荐

  1. Extjs 表单验证后,几种错误信息展示方式

    今天要求对form表单验证,进行系统学习一下,故做了几个示例: Ext.onReady(function(){        var panel=Ext.create('Ext.form.Panel' ...

  2. Sublime Text 安装Emmet

    1.简单的安装方法 从菜单 View - Show Console 或者 ctrl + ~ 快捷键,调出 console.将以下 Python 代码粘贴进去并 enter 执行,不出意外即完成安装.以 ...

  3. Java LinkedList 源码剖析

    LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack).这样看来,LinkedList简直就 ...

  4. 使用jailkit chroot更改ssh用户根目录

    安装jailkit cd /tmp    wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz    tar xzf jailkit-2 ...

  5. 【细说Java】关于main方法的一些细节

    Public static void main(String[] args) public :main方法是jvm运行的入口,所以必须是public来供外部调用 static :main方法无需生成对 ...

  6. P1907飞扬的小鸟

    P1907飞扬的小鸟 描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或 ...

  7. C# XMAL与WPF

    通过老师上课的解释和我下课后的网上查询,我了解到了一些关于这三者的关系.XAML是.NET体系开发程序或者网页时前台编程的一种布局方式或者说开发语言,可以比较自由的用标签的方式进行布局,借鉴了HTML ...

  8. java-内省与javabean

    JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...

  9. Lua与C++互相调用(上)

    int main1(int argc, const char * argv[]) { lua_State* L = luaL_newstate();//创建栈 luaopen_base(L); lua ...

  10. (一)读取PCD文件

    下面是一个简单的读取PCD文件并显示的代码: #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/p ...