1、Map接口
public interface Map
将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射到一个值。
| void clear() | 清空Map集合中的内容 |
|---|---|
| boolean containsKey(Object key) | 判断集合中是否存在指定的key |
| boolean containsValue(Object value) | 判断集合中是否存在指定的value |
| Set | 将Map接口变为Set集合 |
| V get(Object key) | 根据key找到其对应的value |
| boolean isEmpty() | 判断是否为空 |
|---|---|
| Set keySet() | 将全部的key变为Set集合 |
| Collection values() | 将全部的value变为Collection集 |
| 合 | |
| V put(K key,V value) | 向集合中增加内容 |
| void putAll(Map extends K,? extendsV> m) | 增加一组集合 |
| V remove(Object key) | 根据key删除内容 |
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MapDemo {
private static void hashMap() {
Map map=new HashMap();
map.put(1, "Tom");
map.put(2, "lily");
map.put(3, "viec");
map.put(4, "Bin");
System.out.println("size="+map.size());
//从Map中取值
System.out.println(map.get(1));//通过key来取值
//Map遍历
Set> entrySet=map.entrySet();
for(Entry e:entrySet) {
System.out.println(e.getKey()+"->"+e.getValue());
}
System.out.println("·················");
//遍历建
Set kyes=map.keySet();
for(Integer i:kyes) {
String value=map.get(i);
System.out.println(i+"->"+value);
}
System.out.println("·················");
//遍历值
Collection values=map.values();
for(String value:values) {
System.out.println(value);
}
System.out.println("·················");
//forecah
map.forEach((key,value)->System.out.println(key+"->"+value));
}
public static void main(String[] args) {
hashMap();
}
}
size=4
Tom
1->Tom
2->lily
3->viec
4->Bin
1->Tom
2->lily
3->viec
4->Bin
Tom
lily
viec
Bin
1->Tom
2->lily
3->viec
4->Bin
2、HashMap
public class HashMap
implements Map
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。
(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映
射的顺序,特别是它不保证该顺序恒久不变。
3、Hashtable
public class Hashtable
implements Map
此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
4、linkedHashMap
public class linkedHashMap
extends HashMap
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处
在于,后者维护着一个运行于所有条目的双重链接列表。
5、TreeMap
public class TreeMap
implements NavigableMap
基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,
或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
private static void treeMap() {
Map map=new TreeMap();
//map.put("one", "lily");
//map.put("tow", "Tom");
//map.put("three", "Bin");
//map.forEach((key,value)->System.out.println(key+"->"+value));
//自定义Dog class中要实现Comparable
Map dogs=new TreeMap<>();
dogs.put(new Dog(1,"2ha",3),"dog1");
dogs.put(new Dog(2,"wangwang",2),"dog2");
dogs.put(new Dog(3,"hsq",4),"dog3");
dogs.forEach((key,value)->System.out.println(key+"->"+value));
//输出
//Dog [id=1, name=2ha, age=3]->dog1
//Dog [id=2, name=wangwang, age=2]->dog2
//Dog [id=3, name=hsq, age=4]->dog3
}
private static void linkedHashMap() {
Map table=new linkedHashMap();
table.put("one", "lily");
table.put("tow", "Tom");
table.put("three", "Bin");
table.forEach((key,value)->System.out.println(key+"->"+value));
}
private static void hashtable() {
Map table=new Hashtable<>();
table.put("one", "lily");
table.put("tow", "Tom");
table.put("three", "Bin");
table.forEach((key,value)->System.out.println(key+"->"+value));
}
1.8 Map接口的新方法:
在JDK8中Map接口提供了一些新的便利的方法。因为在本文中我所提到的所有Map方法都是以
默认值方法的方式实现的,所以现有的Map接口的实现可以直接拥有这些在默认值方法中定
义的默认行为,而不需要新增一行代码。
getOrDefault(Object, V)
putIfAbsent(K,V)
remove(Object key, Object value)
replace(K,V)
replace(K,V,V)
compute(K key, BiFunction super K,? super V,? extends V> remappingFunction)
computeIfPresent(K key, BiFunction super K,? super V,? extends V> remappingFunction)
merge(K key, V value, BiFunction super V,? super V,? extends V> remappingFunction)



