本帖最后由 朱晓杰 于 2013-5-11 22:31 编辑
Map总结
1.Map概述
映象(Map)用于存放许多关键字/值对。根据关键字,就能够找到它对应的一个值。
键和值都是对象,键必须是唯一的,但值可以是重复的,而且有一些映射可以接收null键和null值。
Map方法摘要:
Map接口提供三种collection 视图,HashTable、HashMap、TreeMap。
HashTable:底层是哈希表数据结构,不允许null,即null value和null key,线程同步(JDK1.0)
HashMap:底层是哈希表数据结构 ,允许null,即null value和null key,线程不同步(JDK1.2),HashMap并不保证元素的顺
序,因此元素添加到HashMap中的顺序并不一定就是它们被迭代器读出的顺序。
TreeMap:底层是二叉树数据结构 ,线程不同步(JDK1.2), 它可以以排序的方式存储键值对,并且允许快速查
找。TreeMap与HashMap不同,保证了它的元素以键的升序或指定排序规则存储。
HashMap和TreeMap的区别:
和Set类似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的时候,才使用TreeMap。
2.Map遍历- /*
- Map遍历方式:1.keySet 2.entrySet 3.增强性for循环
- */
- import java.util.*;
- import static java.lang.System.*;
- public class HashMapDemo {
- public static void main(String[] args) {
- HashMap<String,Integer> hm = new HashMap<String,Integer>();
-
- //添加元素
- hm.put("zxj", 22);
- hm.put("wxp", 19);
- hm.put("hyd", 20);
- hm.put("lv", 11);
-
- //keySet
- Set<String> keySet = hm.keySet();//返回所有键的集合
-
- Iterator<String> key = keySet.iterator();
-
- while(key.hasNext()){
- String jian = key.next();//键
- Integer zhi = hm.get(jian);//值
- out.println("keySet..." + jian + "=" + zhi);
- }
-
- //entryset
- Set<Map.Entry<String, Integer>> entrySet = hm.entrySet();//返回所有键值对的映射关系
-
- Iterator<Map.Entry<String, Integer>> entry = entrySet.iterator();
-
- while(entry.hasNext()){
- Map.Entry<String, Integer> map = entry.next();
- String jian = map.getKey();//键
- Integer zhi = map.getValue();//值
- out.println("entrySet..." + jian + "=" + zhi);
- }
- //增强性for循环
- for (Map.Entry<String, Integer> entry1 : hm.entrySet()) {
- String jian = entry1.getKey().toString();
- String zhi = entry1.getValue().toString();
- out.println("for..." + jian + "=" + zhi);
- }
- }
- }
复制代码 3.Map排序
Map排序,可以按key排序,也可以按value排序,示例代码如下:- /*
- Map排序,可以按照Key排序,也可以按照Value排序
- */
- import java.util.*;
- import static java.lang.System.*;
- class HashMapSortDemo
- {
- public static void main(String[] args)
- {
- Map<String, Integer> maps = new HashMap<String, Integer>();
- maps.put("orange", 8);
- maps.put("banana", 7);
- maps.put("pear", 1);
- maps.put("apple", 5);
- maps.put("watermelon",7);
-
- out.println("排序前:");
- Set<Map.Entry<String,Integer>> entrySet = maps.entrySet();
- Iterator<Map.Entry<String,Integer>> entryIt = entrySet.iterator();
- while(entryIt.hasNext()){
- Map.Entry<String,Integer> entry = entryIt.next();
- String key = entry.getKey();//键
- Integer value = entry.getValue();//值
- out.println(key + "..." + value);
- }
- out.println("排序后:");
- List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps.entrySet());
- Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {
- public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2) {
- //return obj1.getKey().compareTo(obj2.getKey());//按key升序排序
- return obj2.getValue() - obj1.getValue(); //按value降序排序
- }
- });
-
- for (int j = 0; j < info.size(); j++) {
- out.println(info.get(j).getKey() + "..." + info.get(j).getValue());
- }
- }
- }
复制代码 |