hahMap 的数据结构 、遍历以及排序
来源:互联网 发布:网络电话卡是什么 编辑:程序博客网 时间:2024/06/01 09:19
HashMap的遍历
1、ha'shMap的数据结构
其实hashMap 是一个链表的数组,内部是一个存储着链表表头的数组(图片来自其他博客),一般都是key对应的hash值就是该元素在数组的下标。
HashMap里边实现一个静态内部类Entry(key,value,next),所以说的数组就是一个Entry[] 数组。
2、hashMap的遍历
(1).entrySet()返回的是特殊的Set集合。set的Iterator() 返回一个EntryIterator类型的实例。
HashMap map = new HashMap();
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry entry = (Entry) it.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
(2). 遍历keySet
for(String key:map.keySet()){
String value = map.get(key);
}
以上两种方式,第一种的效率高,因为只遍历hashMap一次,将映射关系存入set中。而第二种方式需要先遍历key,再根据key遍历value。
3、排序HashMap
java.util.HashMap<Integer,Integer> map = new java.util.HashMap<Integer,Integer>();
List<Map.Entry<Integer, Integer>> infoIds = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return (o2.getValue() - o1.getValue());
//return (o1.getKey()).compareTo(o2.getKey());
}
});
题外:排序问题
(1)、类需要比较 可以实现Comparable接口
接口中有一个方法 comparableTo(),可以在类中实现(一下代码来自博客http://blog.csdn.net/memewry/article/details/7907012)
- public int compareTo(User arg0) {
- return this.getOrder().compareTo(arg0.getOrder());
- }
(2)、java.util下有一个Comparator(比较器)。它拥有compare( )方法,用来比较两个对象
比如上边HashMap 排序时用到的比较器
- hahMap 的数据结构 、遍历以及排序
- java1.8 HahMap的改进
- HahMap与Hashtable的异同
- 数据结构-----哈夫曼树的构造以及遍历
- 数据结构--图的创建以及遍历
- Set的遍历以及排序详讲
- list,map,set的遍历以及排序
- Set的遍历以及排序详讲
- java集合——HahMap的用法
- 堆数据结构的实现以及堆排序
- 数据结构二叉树的建立以及递归遍历
- 数据结构邻接表的建立以及两种遍历
- 【数据结构实验】二叉树的建立以及遍历
- 【数据结构-图】图的建立以及广度优先遍历算法
- 数据结构(9):二叉树的遍历、构建以及显示(凹入法)
- 「数据结构」二叉树的遍历以及Python实现
- iOS中NSArray的各种遍历以及各种排序方法
- NSArray的各种遍历以及各种排序方法
- Maven使用Tomcat热启动问题:java.lang.LinkageError: loader constraint violation
- amap高德地图利用uri api实现商家名片、去这里的功能
- BZOJ 2818
- 【C++标准模板库笔记2】智能指针shared_ptr的简单使用
- 安信可A7模块---GPRS之AT命令测试
- hahMap 的数据结构 、遍历以及排序
- Win7下的焦点自动失去
- 关于灯板上LED灯总是坏的问题
- POJ 3009 Curling 2.0
- 每天一个linux命令(10):cat 命令
- protobuf【2】Varints方法编码
- 幼儿教育
- Java并发编程:synchronized
- 继承中的两口子(super、this)