在向一个 treemap<int, string> put一个元素的时候
他里面的运算逻辑 是不是类似于 b-tree, 2分比较法方式去一步步的找新元素应该放在的 index?还是通过其他方式一次性就定位了index?再问个题外话.要按这么理解的话 那其他任意的只要是用了 b-tree 方式或与之类似方式所实现的 hash集合都是有序的集合呀?
比如 hashmap<int,int> 就应该以int的值的大小为key, 进行大小排序
hashmap<string,int> 就应该以string的char的asscii值进行大小排序.
果然不出我所料 我测试了一下的确是这样: HashMap<Integer, String> testHashSort = new HashMap<Integer, String>();
testHashSort.put(1, "1");
testHashSort.put(3, "3");
testHashSort.put(5, "5");
testHashSort.put(7, "7");
testHashSort.put(2, "2");
testHashSort.put(4, "4");
testHashSort.put(6, "6");
Collection<String> ss = testHashSort.values();
for (String s : ss) {
System.out.println("--->" + s);
}
但是很奇怪,如果把Integer换成String的话结果却与我预期不符,没有能达到 asscii值的那个顺序有知道的请尽量回答和讨论吧.
他里面的运算逻辑 是不是类似于 b-tree, 2分比较法方式去一步步的找新元素应该放在的 index?还是通过其他方式一次性就定位了index?再问个题外话.要按这么理解的话 那其他任意的只要是用了 b-tree 方式或与之类似方式所实现的 hash集合都是有序的集合呀?
比如 hashmap<int,int> 就应该以int的值的大小为key, 进行大小排序
hashmap<string,int> 就应该以string的char的asscii值进行大小排序.
果然不出我所料 我测试了一下的确是这样: HashMap<Integer, String> testHashSort = new HashMap<Integer, String>();
testHashSort.put(1, "1");
testHashSort.put(3, "3");
testHashSort.put(5, "5");
testHashSort.put(7, "7");
testHashSort.put(2, "2");
testHashSort.put(4, "4");
testHashSort.put(6, "6");
Collection<String> ss = testHashSort.values();
for (String s : ss) {
System.out.println("--->" + s);
}
但是很奇怪,如果把Integer换成String的话结果却与我预期不符,没有能达到 asscii值的那个顺序有知道的请尽量回答和讨论吧.
解决方案 »
- 在命令行输入时隐藏输入内容或以*号显示===================急。。。。。
- 很有趣的java代码,谁能帮我,感谢他一辈子!大家讨论一下,到底有没有办法..
- 几个小问题
- 把图标加入到JTree后,节点上的文字不见了。求教!!!
- 新手请教
- JDBC出错以前还好的
- jdk提示"Exception in thread "main" java.lang.NoClassDefFoundError: Exercise3_2"
- 提问 问题标签用户 关于Myeclipse的错误org.springframework.beans.factory.BeanCreationException
- 如何获取数据库表 的 列名
- Frame中的菜单显示不了?!
- 正则截取<!--开头-->结果的部分并替换
- 多线程发送请求难题~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`请教啊
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
} /**
* Returns index for hash code h.
*/
static int indexFor(int h, int length) {
return h & (length-1);
}他里面的index是根据hash算法计算出来的,所以Integer和String会不一样。
testHashSort1.put(7, "7");
testHashSort1.put(200001, "200001");
testHashSort1.put(200000, "200000");
testHashSort1.put(4, "4");结果:
--->4
--->7
--->200001
--->200000