Map

*Map接口不是Collection接口的子接口
*Map存放数据的方式采用键值对的方式,类似与生活中目录(键)和内容(值)
*常见的实现类:
* HashMap**:采用键-值对的方式进行存放.
* 键(键的集合是就是set集合):唯一,无序,如果键重复,将发生覆盖
* 值:无序 不唯一(Collection)
* 构造函数:
* HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
* HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
* 常用的方法:
* 增:
* put(K key, V value)***:在此映射中关联指定值与指定键。
* 删:
* remove(Object key):从此映射中移除指定键的映射关系(如果存在)。
* 改:
* 查:
* get(Object key)***: 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
* 其他方法:
* size()**:返回容器中键值对个数。
* containsKey(Object key)**:如果此映射包含对于指定键的映射关系,则返回 true。
* containsValue(Object key):如果此映射包含对于指定值的映射关系,则返回 true。
* keySet()** :返回容器中键的集合,本质就是一个set集合
* values()**:返回值的集合,本质是一个Collection集合
*
* ---LinkedHashMap:
* 有序(位置顺序)的HashMap 速度快
*
*
* Hashtable:
* TreeMap:

*putAll(Map<? extends K,? extends V> m)
* 将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。
* Set<Map.Entry<K,V>> entrySet():返回此映射所包含的映射关系的 Set 视图。
* Map.Entry:代表一个键值对。
* getKey() :返回与此项对应的键。
* getValue() :返回与此项对应的值。
*Map的遍历方式:
*方式1:通过键进行遍历
*a.先获取键的集合;b.遍历键的集合 ; c.根据键获取对应的值
*方式2:通过键值对进行遍历***
*a.先获取键值对的集合;b.遍历键值对; c.从键值对中获取键和值

//遍历方式1: a.先获取键的集合;b.遍历键的集合 ; c.根据键获取对应的值
Set<String> keys = map.keySet();//获取键的集合
for (String key : keys) {
String value = map.get(key);
System.out.println("key="+key+",value="+value);
}
System.out.println("**********************");
//遍历方式2: a.先获取键值对的集合;b.遍历键值对; c.从键值对中获取键和值
// Set entrySet = map.entrySet();
// for (Object object : entrySet) {
// Map.Entry entry = (Map.Entry)object;//
// Object key = entry.getKey();
// Object value=entry.getValue();
// System.out.println("key="+key+",value="+value);
// }
//遍历方式3:遍历值的集合
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key="+key+",value="+value);
}


//遍历方式4 迭代器遍历
Iterator<Entry<String,String>> iter= l.entrySet().iterator();
while(iter.hasNext()){
Entry<String,String> ertry= iter.next();
System.out.println(entry.getKey()+entry.getValue());


*Hashtable:采用hash表进行存储,继承了Directory
*此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
*HashMap和Hashtable的区别:
* 1、Hashtable在JDK1.1已经存在,继承了Directory类,默认初始容量11
* HashMap实现了Map接口,默认初始容量16
* 2、HashMap中键和值都可以为null,如果键相同将方式覆盖(如果多个键值为null,后边的将覆盖前边的)
* Hashtable中键和值都不能为null,如果键或值为null将发生空指针异常
* 3、Hashtable是基于线程的安全,在多线程中使用;而HashMap是非线程安全的,效率较高
*常用方法与HashMap相同
hashtable.put(null, "123");//出现空指针异常


* LinkedHashMap继承了HashMap,采用的hash表(查询快)+链表的结构(添加删除快,有序)进行存储。
* 有序(位置顺序)
* HashMap:无序(位置顺序)
*/
*Hashtable:采用hash表进行存储,继承了Directory
*此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
*HashMap和Hashtable的区别:
* 1、Hashtable在JDK1.1已经存在,继承了Directory类,默认初始容量11
* HashMap实现了Map接口,默认初始容量16
* 2、HashMap中键和值都可以为null,如果键相同将方式覆盖(如果多个键值为null,后边的将覆盖前边的)
* Hashtable中键和值都不能为null,如果键或值为null将发生空指针异常
* 3、Hashtable是基于线程的安全,在多线程中使用;而HashMap是非线程安全的,效率较高
*常用方法与HashMap相同


*Collections:工具类,提供了一下操作Collection集合的静态方法:
* sort():排序
* reverse():反转指定列表中元素的顺序。
* binarySearch():使用二分搜索法搜索指定列表,以获得指定对象
* ....
*
*Collection和Collections的关系类似于Array和Arrays的关系
*


TreeMap:实现了Map接口,采用红黑数(二叉树)的方式存放数据
*特点:
* 有序(自然顺序)
* 构造函数:
* TreeMap():使用键的自然顺序构造一个新的、空的树映射。
*
TreeMap(): 使用键的自然顺序构造一个新的、空的树映射。
*TreeMap(Comparator<? super K> comparator): 构造一个新的、空的树映射,该映射根据给定比较器进行排序。

* 比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
*/
@Override
public int compare(Teacher o1, Teacher o2) {
// return o1.getAge()-o2.getAge();//升序
return -(o1.getAge()-o2.getAge());//降序

原文地址:https://www.cnblogs.com/seePoppy/p/6745355.html