目录
Map接口
- java.util.Map接口
- 内部实现:数组+链表
- 和Collection最大的不同就是Map存储的是键值对(我之前文章将他称为情侣约会,家庭聚会),而Collection存储的是单个单元(我们称它为单身patty).
常用方法:
添加方法:
1.添加方法
-
put(key,value) 一次添加一对映射关系
-
put(Map map) 一次添加多对映射关系
this = this ∪ map
@Test
public void test() {
//测试添加
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("王五",new String[] {"网红1","网红2"});
System.out.println(map.size());
}
2.删除方法
- remove(Object key) 删除指定key值的键值对
- clear() 清空map
@Test
public void test1() {
//测试删除
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("王五",new String[] {"网红1","网红2"});
map.remove("王五");
System.out.println(map.size());
}
3.修改方法
- 通过put可以替换value(因为map中的key值是不能重复的,添加重复的key值,就会覆盖之前的元素的value值)
@Test
public void test() {
//测试用put进行修改元素的value值
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("曹操","乔碧Luo ");
map.put("王五",new String[] {"网红1","网红2"});
System.out.println(map.size());
}
4.查询
- containkey(Object key)判断map中是否有这个key值
- containvalue(Object value) 判断map中是否有这个value值
- V get(Object key)获取该key值所对应的value值
- boolean isEmpty() 判断这是否是一个空的map
@Test
public void test() {
//测试添加
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("王五",new String[] {"网红1","网红2"});
boolean i = map.containkey("小雷");
boolean g = map.containkey("小白");
boolean n = map.get("小雷");
boolean b = map.isEmpty();
System.out.println(map.size());
System.out.println(i);
System.out.println(g);
System.out.println(n);
System.out.println(b);
}
5.获取键值对数
-
Map对象.size()
前面的代码示例中都有这个方法,不重复展示啦.
6.遍历
- Set KeySet() 获取map的所有key值
- Collection value() 获取map的所有的value值
- Set entrySet() 由entry对象构成的set,因为key值不重复,那么entry对象也不重复,结果是以键值对返回的
- Map.Entry是Map的一个内部接口,它有方法getKey()和方法getValue()
- 它的对象可以获取map对象的key和value
@Test
public void test3() {
//遍历
//获取map所有的key值
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("王五",new String[] {"网红1","网红2"});
Set KeySet = map.keySet();
for (Object obeject : KeySet) {
System.out.println(obeject);
}
System.out.println(map.size());
}
@Test
public void test3() {
//遍历
//获取map所有的value值
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("王五",new String[] {"网红1","网红2"});
Collection c = map.values();
for(Object object : c){
System.out.println(c);
}
System.out.println(map.size());
}
@Test
public void test3() {
//遍历
//获取map所有键值对
Map map = new HashMap();
map.put("小雷", "小白");
map.put("张三", "李四");
map.put("曹操",null);
map.put("王五",new String[] {"网红1","网红2"});
Set entrySet = map.entrySet();
for(Object object : entrySet){
System.out.println(object);
}
System.out.println(map.size());
}
Map常用实现类
HashMap
- HashMap是 Map 接口使用频率最高的实现类。
- 允许使用null键和null值,与HashSet一样,不保证映射的顺序。
- HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 方法返回 true,hashCode 值也相等。
- HashMap 判断两个 value相等的标准是:两个 value 通过 equals() 方法返回 true。
TreeMap
- TreeMap存储 Key-Value 对时,需要根据 key进行排序。TreeMap 可以保证所有的 Key-Value 对处于有序状态。
- TreeMap 的 Key 的排序:
- 自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException
- 定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对 TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现 Comparable 接口
- TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。
- 若使用自定义类作为TreeMap的key,所属类需要重写equals()和hashCode()方法,且equals()方法返回true时,compareTo()方法应返回0。
LinkedHashMap(JDK1.7-JDK1.8)
- LinkedHashMap 是 HashMap 的子类
- 与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致