接口
- java.util.Map<K,V>
- java.util.SortedMap<K,V>
- java.util.NavigableMap<K,V>
- java.util.SortedMap<K,V>
- java.util.Map.Entry<K,V>
注意:
Map.Entry<K,V> 这个接口。三个方法getKey() getValue() setValue() hashCode()
Map的方法:keySet() entrySet() values()
put()----putAll() get() containsKey() containsValue()
类架构
- java.lang.Object
- java.util.AbstractMap<K,V> (implements java.util.Map<K,V>)
- java.util.EnumMap<K,V> (implements java.lang.Cloneable, java.io.Serializable)
- java.util.HashMap<K,V> (implements java.lang.Cloneable, java.util.Map<K,V>, java.io.Serializable)
- java.util.LinkedHashMap<K,V> (implements java.util.Map<K,V>)
- java.util.IdentityHashMap<K,V> (implements java.lang.Cloneable, java.util.Map<K,V>, java.io.Serializable)
- java.util.TreeMap<K,V> (implements java.lang.Cloneable, java.util.NavigableMap<K,V>, java.io.Serializable)
- java.util.WeakHashMap<K,V> (implements java.util.Map<K,V>)
- java.util.AbstractMap<K,V> (implements java.util.Map<K,V>)
两个通用的实现:HashMap和TreeMap
区别:TreeMap有顺序:按照键的整体顺序对元素进行排序;HashMap的速度稍快;TreeMap的构造
注意:
对同一个键两次使用Put,第二个值会覆盖第一个值。
三个视图:
keySet() values() entrySet();不能利用keySet来只加键,不加value,如果keySet调用add()方法,将会抛出一个UnsupportedOperationException。
几个特殊的Map
WeakHashMap:解决 如果有一个值对应的键已经不再使用了的情况。
linkedHashSet 记录插入顺序
linkedHashMap:使用访问顺序,来记录:每次调用getset将受影响的条目从当前的位置删除,并放到条目链表的尾部---------“访问顺序”对于实现“最近最少使用”原则十分重要
当限制Map大小时,有一个重要需要覆盖的方法,就是removeEldstEntry()
EnumSet的建立:调用静态工厂方法
EnumMap: EnumMap<WeekDay,EmPloy> personInCharge = new EnumMap<Weekday,Employee>(weekday.class);
集合框架
RandomAccess用来检测一个特定的集合是否支持高效的随机访问。
视图的概念 keySet
包装器
ARRAY类提供了动态创建和访问 Java 数组的方法。 newInstance(Class<?> componentType, int length)
ARRAYS此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。Arrays.asList()
注意:asLIst()方法返回的是一个视图,只能GEtSet不嗯能够改变大小如Remove,Add()
Collections类:
nCopies(n,anObject); 返回一个不可修改的LIst接口对象
singleton(anObject);返回一个Collection接口对象。
singleMap()
子范围
sublist
subSet headSet tailSet()
subMap()
headMap()
tailMap()
不可修改视图
Collections.unmodifiableCollection() unmodifiableSet() unmodifiableList()
同步视图
SynChronizedSet SynChronizedMap SynChronizedList
被检查视图
向LIst<Student>中加入teacher对象时,不会报错,Checked视图就会报错。
批操作
addAll removeAll retainAll()
集合数组之间的转换
1 String values=.......
HashMap<String> staff = new HashMap<String> (Arrays.asList(values));
2 错误:String[] values = staff.toAaary() 返回的是Object[]
正确 : String[] values = staff.toArray(new String[0])或者String[] values = staff.toArray(String.class)