Map是JAVA中比较常用的存储类,下面来介绍一下它常用的方法:
遍历Map:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
排序Map:
List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
Entry obj1 = (Entry) o1;
Entry obj2 = (Entry) o2;
// 比较Map中数值getValue()的大小:
return ((Integer) (obj2.getValue()) - (Integer) (obj1
.getValue()));
}
});
以下是完整的测试类:
public class TestMap {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("7", 7);
map.put("4", 4);
map.put("3", 3);
List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
Entry obj1 = (Entry) o1;
Entry obj2 = (Entry) o2;
// 比较Map中数值getValue()的大小:
return ((Integer) (obj2.getValue()) - (Integer) (obj1
.getValue()));
}
});
// 遍历一下数据
for (Iterator iter = list.iterator(); iter.hasNext();) {
Entry element = (Entry) iter.next();
Object strKey = element.getKey(); // 键值
Object strValue = element.getValue(); // value值
System.out.println(strValue);
}
}
}
打印结果:
7
4
3
2
1
如果按照保存插入顺序得到遍历的话,需要改用LinkedHashMap。
LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.也可以在构造时用带参数,按照应用次数排序。
给一个例子:
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
public class TestMap {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("1", 1);
map.put("2", 2);
map.put("7", 7);
map.put("4", 4);
map.put("3", 3);
// 遍历一下数据
System.out.println("=====HashMap=====");
for (Iterator<String> it = map.keySet().iterator(); it.hasNext();) {
Object key = it.next();
System.out.println(key + "=" + map.get(key));
}
LinkedHashMap<String, Integer> map2 = new LinkedHashMap<String, Integer>();
map2.put("1", 1);
map2.put("2", 2);
map2.put("7", 7);
map2.put("4", 4);
map2.put("3", 3);
// 遍历一下数据
System.out.println("=====LinkedHashMap=====");
for (Iterator<String> it = map2.keySet().iterator(); it.hasNext();) {
Object key = it.next();
System.out.println(key + "=" + map2.get(key));
}
}
}
输出的结果:
=====HashMap=====
3=3
2=2
1=1
7=7
4=4
=====LinkedHashMap=====
1=1
2=2
7=7
4=4
3=3
可以看到HashMap遍历后,顺序与之前不一致,而采用LinkedHashMap的顺序是一致的。但LinkedHashMap在遍历的时候要比HashMap慢,不过有种情况例外:当HashMap容量很大,且实际数据较少的时候,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。