java中的Map接口
前言
正文
散列桶
1.散列桶的概念
2.应用场景
3.原理
MAP接口
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
它的常用实现类有HashMap、Hashtable、Properties和TreeMap。
1.HashMap
- 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
- 2))V put(K key, V value)
在此映射中关联指定值与指定键。并返回放置在MAP的value的对象。如果key重复,直接将前一次key对应的value值覆盖掉。3)) V get(Object key)
返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。4))boolean containsKey(Object key)
如果此映射包含对于指定键的映射关系,则返回 true。5))boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。6)) boolean isEmpty()
如果此映射不包含键-值映射关系,则返回 true7)) int size()
返回此映射中的键-值映射关系数。8)) V remove(Object key)
从此映射中移除指定键的映射关系(如果存在)。 在MAP集合中,根据key移去key所对应的value对象,并将value作为返回值。同时释放key的内容;如果key在MMAP中不存在,则返回null。9)) Set<K> keySet()
返回此映射中所包含的键的 Set 视图。10)) Collection<V> values()
返回此映射所包含的值的 Collection 视图。11)) Set<Map.Entry<K,V>> entrySet()
返回此映射所包含的映射关系的 Set 视图。1))) 获取hashMap的key和value的示例示例:
方式一
方式二
先利用 Set<K> keySet() 返回此映射中所包含的键的 Set 视图 ;再通过获取的set视图中的key来获取对应的value。
2.Hashtable
此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。key不可为空。
hashCode
方法和 equals
方法。3.Properties
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
该类可以读取和写入数据到流中。
1)Properties的继承结构
java.lang.Object java.util.Dictionary<K,V> java.util.Hashtable<Object,Object> java.util.Properties
2)此类是线程安全的:多个线程可以共享单个 Properties 对象而无需进行外部同步。
3)构造器
public Properties()
创建一个无默认值的空属性列表。即默认大小为零。
4.API
1))void load(InputStream inStream)
Reads a property list (key and element pairs) from the input byte stream ,即把I/O流的数据加载到当前对象(内存)。
注:
所以的数据只能在内存中操作。
2))String getProperty(String key)
Searches for the property with the specified key in this property list。
3))Object setProperty(String key, String value)
Calls the Hashtable method put
4))读取配置文件信息的例子:
注:
properties的方法只能改变已读到内存中的信息,不能直接修改文件内容(可以将修改后的数据使用输出流写到文件中);
4.TreeMap
A Red-Black tree based NavigableMap implementation。
Note that this implementation is not synchronized.
1)API
1))TreeMap()
Constructs a new, empty tree map, using the natural ordering of its keys.
小结
1.Collection接口和Map的区别:
Collection接口用来定义使用集合的接口;
而MAP接口用于成对放置对象的集合,key不重复,value可重复。如果key重复,后面的value覆盖前面的value。
2.实现类:
hashMap 采用散列表的算法实现
TreeMap 采用红黑树算法实现,利用key进行排序。
3.应用场景:
Map集合适用于查找,而且是一一映射的。
集合的工具类Collections
同数组的工具类Arrays类似,Collections提供了排序、二分查找、乱序和填充等功能。
1.API
1)static <T extends Comparable<? super T>> void sort(List<T> list)
Sorts the specified list into ascending order, according to the natural ordering of its elements.
2)static <T> void sort(List<T> list, Comparator<? super T> c)
Sorts the specified list according to the order induced by the specified comparator.
3)static void swap(List<?> list, int i, int j)
Swaps the elements at the specified positions in the specified list
4)
static <T> List<T> synchronizedList(List<T> list)
Returns a synchronized (thread-safe) list backed by the specified list.
static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
Returns a synchronized (thread-safe) map backed by the specified map.
static <T> Set<T> synchronizedSet(Set<T> s)
Returns a synchronized (thread-safe) set backed by the specified set.
5)static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
Searches the specified list for the specified object using the binary search algorithm.
Comparable 和Comparator比较器
1.compatable的特点
1)实现这个接口的类的实例是可以比较的,可以进行自然排序。
2)int compareTo(T o)
Compares this object with the specified object for order;返回值为正数时,表示大,返回值为负数时表示小,返回零表示相等。
3)Comparable的实现必须与equals方法的结果一致。即comparableTo方法的返回值为零时,equals方法就应该返回true。
2.Comparator比较工具
用于临时定义比较的规则,而不是采用默认的比较规则
1)int compare(T o1, T o2)
Compares its two arguments for order.
2)案例:计算从控制台获取的字符串的字符次数,按次数的降序输出。
集合的复制
java默认的复制是浅拷贝。
1)clone()方法
2)使用构造器复制
ArrayList(Collection c);
注:
使用的集合都有复制构造器,而且他们是浅复制。
总结
1.Compable 和Comparator的区别
1)Compable是对象与对象之间的比较。(equals 方法是判断当前对象和另一个对象是否内容一样;compareTo方法是判断当前对象与另一个对象的大小关系)该接口用于实体类中。
2)Comparator是独立存在的比较算法,该算法一般被集合调用。