小议map排序问题
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排序问题的更多相关文章
- java List<Map> 排序问题
Collections.sort(order_from_list, new Comparator<Map<Object, Object>>() { public int com ...
- java Map排序问题
java 中,Map常见的有HashMap ,TreeMap等等,Map是一个接口,我们不能直接声明一个Map类型的对象,在实际开发 中,比较常用的Map性数据结构是HashMap和TreeMap,它 ...
- Fastjson 序列化,反序列化Map对象排序问题(字符串转map,map转字符串)
背景 记录项目中遇到的 关于fastjson jsonobject转string乱序,string转jsonObject乱序问题的解决方案 fastJson issues 问题来源描述参见: http ...
- java map的默认排序问题
import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Tre ...
- 对map创建出来的值顺序排序问题
TreeMap 在用Ajax动态创建checkBox时,而把值放在了HashMap中,hashMap是无序的,因此你动态创建出来的顺序是乱的,比如你想要的顺序是1.2.3.4但出来的结果可能是 3.2 ...
- 笔记 freemark list标签迭代Map<Map<String,Object>集合排序问题
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. 工作中出现一个比较特殊的问题,在模板ftl文件中,一般用list迭代map 举例: 后台: // 传入的参数 ...
- fastjson排序 Map多层嵌套转换自动排序问题终极解决方案
阅读更多 最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObjec ...
- STL Map的使用
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力.下面就通过示例记录一下map的使用: 一.向map中 ...
- c++ list, vector, map, set 区别与用法比较
http://blog.csdn.net/alex_xhl/article/details/37692297 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于ve ...
随机推荐
- shell学习--grep2
grep相关的练习,解释下面grep表达式的含义: grep '\<Tom\>' file 打印file中包含单词 Tom的行 grep 'Tome Savage' file 打印file ...
- String的方法运用
public class StringUse { public static void main(String[] args) { int count = 0; String s=new String ...
- js常用的地址栏参数获取
用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg ...
- First class ,6 examples anlaysisi
http://www.fgm.cc/learn/ First class ,6 examples anlaysisi <!DOCTYPE html> <!-- To change t ...
- Linux三剑客之sed
sed sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像.sed按顺序逐行读取文件.然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可 ...
- php安装libiconv-1.14.tar.gz遇到的问题
遇到的Error code In file included from progname.c:26:0: ./stdio.h:1010:1: error: ‘gets‘ undeclared here ...
- iptables之LOG目标 被拦截包分析
iptables之LOG目标 问题 在iptables的INPUT链中发现有大量未知包被拦截,这种情况就有两种可能,一是自己的某个服务的iptables端口没有打开,二是服务器正在遭受攻击 分析 这就 ...
- 谷歌CEO发布年度公开信:专注人工智能等6大业务领域
- SVN修改用户名与密码
由于在svn的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法. 解决方案如下: 在Eclipse使用SVN的过程中大多数人往往习惯把访问SVN的用户名 ...
- js生成验证码并检验
<html> <head> <title>验证码</title> <style type="text/css"> #co ...