Java 容器(四) Map
2016-05-05 17:11
393 查看
Java 容器(四) Map
1.Map的使用估计是最常见的了:
1)HashMap:存储的值可以重复,键不能;不能使用Comparator和Comparable接口排序;HashMap最多只允许一条记录的键为null,不允许多条记录的键为null
2)TreeMap:存储的值可以重复,键不能;自动排序或手动排序;
3)LinkedHashMap:存储的值可以重复,键不能;保持输入的顺序
其中它们的用法和Set对比,几乎是一一对应:
结果如下:
2.注意
1)同Set,hashMap和LinkedHashMap不支持排序;
2)hashTable:基本上与hashMap相同,它不允许记录的键或者值为空;线程同步;
3)HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key;
4)另外注意到,treeMap当key是基础类,如String时候,似乎只能使用Comparator接口,基础类的Comparable接口是内置的(TreeMap排序使用Comparable没有实现过)
3.Map中迭代器使用:
结果如下:
1.Map的使用估计是最常见的了:
1)HashMap:存储的值可以重复,键不能;不能使用Comparator和Comparable接口排序;HashMap最多只允许一条记录的键为null,不允许多条记录的键为null
2)TreeMap:存储的值可以重复,键不能;自动排序或手动排序;
3)LinkedHashMap:存储的值可以重复,键不能;保持输入的顺序
其中它们的用法和Set对比,几乎是一一对应:
package roadArchitectWeb.Test; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.TreeMap; class Student{ private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Student(Integer id, String name) { super(); this.id = id; this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } @Override public int hashCode() { return this.id; } @Override public boolean equals(Object obj) { if(obj instanceof Student){ Student stu = (Student)obj; if(stu.name == this.name && stu.id == this.id) return true; } return false; } } public class Test5 { protected static Map<String,Student> hashMap = new HashMap<String,Student>(); /*Comparable的排序会失效,因为map只能按键排列*/ protected static Map<String,Student> treeMapComparable = new TreeMap<String,Student>(); protected static Map<String,Student> treeMapComparator = new TreeMap<String,Student>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }); protected static Map<String,Student> linkedHashMap = new LinkedHashMap<String,Student>(); public static void main(String[] args) { hashMap.put("1",new Student(3,"sun")); hashMap.put("2",new Student(1,"zhao")); hashMap.put("3",new Student(2,"qian")); System.out.println("hashMap:"+hashMap); /* *这里使用Comparable */ treeMapComparable.put("3",new Student(3,"sun")); treeMapComparable.put("2",new Student(1,"zhao")); treeMapComparable.put("1",new Student(2,"qian")); System.out.println("treeMapComparable:"+treeMapComparable); /*这里使用Comparator */ treeMapComparator.put("3",new Student(3,"sun")); treeMapComparator.put("1",new Student(1,"zhao")); treeMapComparator.put("2",new Student(2,"qian")); System.out.println("treeMapComparator:"+treeMapComparator); linkedHashMap.put("3",new Student(3,"sun")); linkedHashMap.put("1",new Student(1,"zhao")); linkedHashMap.put("2",new Student(2,"qian")); System.out.println("linkedHashMap:"+linkedHashMap); } }
结果如下:
hashMap:{1=Student [id=3, name=sun], 2=Student [id=1, name=zhao], 3=Student [id=2, name=qian]} treeMapComparable:{1=Student [id=2, name=qian], 2=Student [id=1, name=zhao], 3=Student [id=3, name=sun]} treeMapComparator:{3=Student [id=3, name=sun], 2=Student [id=2, name=qian], 1=Student [id=1, name=zhao]} linkedHashMap:{3=Student [id=3, name=sun], 1=Student [id=1, name=zhao], 2=Student [id=2, name=qian]}
2.注意
1)同Set,hashMap和LinkedHashMap不支持排序;
2)hashTable:基本上与hashMap相同,它不允许记录的键或者值为空;线程同步;
3)HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key;
4)另外注意到,treeMap当key是基础类,如String时候,似乎只能使用Comparator接口,基础类的Comparable接口是内置的(TreeMap排序使用Comparable没有实现过)
3.Map中迭代器使用:
/*遍历key*/ Iterator it1 = hashMap.keySet().iterator(); while(it1.hasNext()){ System.out.println("key:"+it1.next()); } /*遍历entry,从而可以获得key或者value的值*/ Iterator it2 = hashMap.entrySet().iterator(); while(it2.hasNext()){ Map.Entry<String, Student> entry = null; entry = (Entry<String, Student>) it2.next(); System.out.println("value:"+entry.getValue()); }
结果如下:
key:1 key:2 key:3 value:Student [id=3, name=sun] value:Student [id=1, name=zhao] value:Student [id=2, name=qian]
相关文章推荐
- android Google Map获取地理位置信息的方法
- Spark RDD API详解(一) Map和Reduce
- c语言实现hashmap(转载)
- Python中map()函数浅析
- Android使用Google Map浅谈
- C#中遍历Hashtable的4种方法
- Erlang中的映射组Map详细介绍
- c++中map的基本用法和嵌套用法实例分析
- C#将HashTable中键列表或值列表复制到一维数组的方法
- asp.net基于HashTable实现购物车的方法
- 详解C#中HashTable的用法
- 百度地图给map添加右键菜单(判断是否为marker)
- JavaScript中实现Map的示例代码
- JAVASCRIPT HashTable
- jquery中map函数与each函数的区别实例介绍
- jquery中map函数遍历数组用法实例
- jquery与google map api结合使用 控件,监听器
- jquery遍历数组与筛选数组的方法
- java hashtable实现代码
- JavaScript中实现map功能代码分享