本帖最后由 支离疏者 于 2015-5-26 19:49 编辑
Map集合:该集合存储键值对,一对一对往里存,并且键是唯一的。 特点:要保证map集合中键的唯一性 Map |--Hashtable:底层是哈希表数据结构,不可以存入null值null键,该集合是线程同步的 |--HashMap:底层是哈希表数据结构,允许存入null值null键,该集合不同步的,效率高 |--TreeMap:底层是二叉树结构,线程不同步,可以用于给Map集合中的键进行排序。 1,添加 V put(K key, V value) void putAll(Map<? extends K,? extends V> m) 2,删除 void clear() V remove(Object key) 3,判断 boolean containsKey(Object key) boolean containsValue(Object value) boolean isEmpty() 4,获取 V get(Object key) int size() Collection<V> values() Set<K> keySet() :将map中所有的键存入到set集合,因为set具备迭代器 所有可以迭代方法取出所有的键,再根据get方法,获取每一个键对应的值 Map集合的取出原理:将map集合转成Set集合,再通过迭代器取出。 Set <String> keySet=map.keySet(); Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key =it.next(); String value =map.get(key); System.out.println(“key:”+key+”,value:”+value) } Set<Map.Entry<K,V>> entrySet() :将map集合中的映射关系存入到了set集合中 Set <Map.Entry<String,String>> entrySet = mao.entrySet(); Iterator <Map.Entry<String,String>> it = entrySet.iterator(); While(it.hasNext()) { Map.Entry <String,String> me=it.next(); System.out.println(me.getKey()+”:::”+me.getValue()); } map.Entry :Entry就是Map接口中的内部接口; 为什么要定义在map内部呢?Entry是访问键值关系的入口,是map的入口访问的是map中的键值对。 TreeSet:排序 例:按学生姓名排序: import java.util.*; class TreeMapTest { public static void main(String[] args) { TreeMap<Student,String>tm=new TreeMap<Student,String>(new StuNameCompare()); tm.put(new Student("lisi04",39),"shanghai"); tm.put(new Student("lisi06",35),"hangzhou"); tm.put(new Student("lisi02",32),"wuhan"); /* 方法一:entrySet: Set<Map.Entry<Student,String>> entrySet = tm.entrySet(); Iterator <Map.Entry<Student,String>> it=entrySet.iterator(); while (it.hasNext()) { Map.Entry<Student,String> me = it.next(); System.out.println(me.getKey()+"...."+me.getValue()); //System.out.println(it.next()); } */ //方法二:keySet: Set<Student> keySet = tm.keySet(); Iterator <Student> it = keySet.iterator(); while (it.hasNext()) { Student stu=it.next(); String addr=tm.get(stu); System.out.println(stu+"---"+addr); } } } class StuNameCompare implements Comparator<Student>//设立一个比较器,以学生姓名为排序依据 { public int compare(Student s1,Student s2) { int num = s1.getName().compareTo(s2.getName()); if (num ==0) { num = new Integer(s1.getAge()).compareTo(new Integer(s2.getAge())); } return num; } }
什么时候使用map集合?当数据之间存在着映射关系时,就要先想map集合
|