一、Map集合的特点
- Map集合是一个双列集合,一个元素包含两个值(一个是key,一个是value)Map集合的特点
- Map集合中的元素,key和value的数据类型可以相同也可以不同
- Map集合中的元素,key是不允许重复的,value是可以重复的
- Map集合中的元素,key和value是一一对应的
Map的常用方法
1、public V put (K key, V value)
方法
作用:把指定的键与指定的值添加到Map集合中
返回值V的含义:存储键值对的时候,key如果不重复,返回值v是null;存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值
2、public V remove(Object key)
方法
作用:把指定的键所对应的键值对元素,在Map集合中删除,返回被删除的值
返回值V:当key存在的时候,v返回被删除的值;当key不存在的时候,v返回null
注意我们需要注意在接收返回值的时候,使用包装类,因为基本数据类型无法接收null值,举例说明
public static void main(String[] args){
Map<String,Integer> map = new HashMap<>();
map.put("赵丽颖", 168);
map.put("林志玲", 165);
map.put("杨颖", 178);
System.out.println(map);// 打印输出{林志玲= 168, 杨颖 = 178, 赵丽颖 = 168}
Integer v = map.remove("林志颖");// 得到v是null
// 当我们使用int类型接收返回值的时候
int v = map.remove("林志颖");// 会报出空指针异常的错误,因为int类型接收不到null值
}
3、public V get(Object key)
方法
作用:根据指定的键,在Map集合中获取对应的值
返回值的含义:当key存在的时候,返回对应的value值,key不存在的时候,返回null
4、boolean containsKey(Object key)
方法
作用:判断集合中是否包含指定的键
返回值含义:如果集合中包含key则返回true,如果不包含则返回false
如何遍历Map集合?
1、Map集合遍历的第一种方式:
我们需要使用keySet()方法,把Map集合中所有的key取出来存储到Set集合中,然后通过get(key)方法把每个对应的键找到对应的值,然后实现遍历效果
举例说明
public static void main(String[] args){
Map<String,Integer> map = new HashMap<>();
map.put("赵丽颖", 168);
map.put("林志玲", 165);
map.put("杨颖", 178);
// 使用Map集合中的keySet()方法,把Map集合中的所有key取出来,存储到一个Set集合当中
Set<String> set = map.keySet();
// 遍历Set集合,获取Map集合当中的每一个key
// 使用迭代器遍历
Iterator<String> it = set.iterator();
while (it.hasNext()){
String key = it.next();
// 通过Map集合中的方法get(key)找到value
Integer value = map.get(key);
System.outprintln(key + "=" + value);
}
}
2、Map集合的第二种遍历方式
(1)首先我们需要了解Entry键值对对象是什么?
Map.Entry<K,V>:在Map接口中有一个内部接口Entry
作用:当Map集合一创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
(2)Set<Map.Entry<K, V>> entrySet()方法
Map中有一个entrySet()方法是用来把Map集合内部的多个Entry对象取出来,存储到一个Set集合中
(3)使用Entry对象进行遍历Map集合
实现步骤:
① 使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
② 遍历一个Set集合,获取每一个Entry对象
③ 使用Entry对象中的方法getKey()和getValue()获取键与值
举例说明:
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("赵丽颖", 168);
map.put("林志玲", 165);
map.put("杨颖", 178);
// 1、使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
Set<Map.Entry<String, Integer>> set = map.entrySet();
// 2、遍历一个Set集合,获取每一个Entry对象
// 使用迭代器遍历set集合
Iterator<Map.Entry<String, Integer>> it = set.iterator();
while (it.hasNext()){
Map.Entry<String, Integer>> entry = it.next();
// 使用Entry对象中的方法getKey()和getValue()获取键与值
String key = entry.getKey();
Integer value = entry.getValue();
System.outprintln(key + "=" + value);
}
}
二、HashMap集合
HashMap集合是Map的实现类
1、HashMap集合的特点
- HashMap集合的底层是哈希表,查询的速度特别块
- HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致
2、HashMap存储自定义类型键值
如果想要把自定义类型存储到key当中,那么你的自定义类型必须重写hashCode()方法和equals()方法,以保证key唯一。如果想存入value的话则不用重写hashCode()方法和equals()方法
三、LinkedHashMap集合
LinkedHashMap集合是HashMap集合的子类,继承类HashMap集合
LinkedHashMap集合的特点
- LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
- LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的
四、Hashtable和HashMap集合的区别
HashMap集合:
1、可以存储null值,null键。
2、底层是一个哈希表,是一个线程不安全的集合,速度块
Hashtable集合:
1、不能存储null值,null键
2、底层也是一个哈希表,是一个线程安全的集合,速度慢