Map接口及其实现类HashMap、LinkedHashMap和Hashtable的简单介绍

it2023-10-02  74

一、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、底层也是一个哈希表,是一个线程安全的集合,速度慢

最新回复(0)