初识Map:
Map接口没有从Collection接口继承,Map接口用于维护“键-值”对数据,这个“键-值”对就是Map中的元素,Map提供“键(Key)”到“值(value)”的映射,一个Map中键值必须是唯一的,不能有重复的键,因为Map中的“键-值”对元素是通过键来唯一标识的,Map的键是用Set集合来存储的,所以充当键元素的类必须重写hashCode()和equals()方法,通过键元素来检索对应值元素
Map中常用方法:
V put(K key, V value) //向Map集合中添加键值对 V get(Object key) //返回指定键映射到的值,通过key获取value void clear() //从此映射中删除所有映射,清空Map集合 boolean containsKey(Object key) //判断Map是否包含某个key boolean containsValue(Object value) //判断Map是否包含某个value boolean isEmpty() //判断Map中元素个数是否为0 Set<K> keySet() //获取Map集合中所有的key(所有的键都是一个“Set集合”) V remove(Object key) //通过key删除键值对,如果存在,则从该映射中移除键的映射(可选操作) int size() //获取Map集合中键值对的个数
HashMap:
HashMap特点:
(1)HashMap实现了Map 接口 (4)HashMap以Hash表为基础构建 (2)HashMap 允许键(Key)为空和值(Value)为空 (3)HashMap不是线程安全的,不能用在多线程环境中
HashMap常用的构造方法如下:
(1)HashMap():创建一个空 HashMap 对象,并为其分配默认的初始容量和加载因子
(2)HashMap(int initialCapacity):创建一个空 HashMap 对象,并为其分配指定的初始容量
(3)HashMap(int initialCapacity,float loadFactor);创建一个空 HashMap 对象,并其分配指定的初始容量和加载因子
(4)HashMap(Map m):创建一个与给定Map 对象具有相同键-值对的 HashMap 对象
HashMap方法的简单使用:
import java.security.Key; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class Warehouse1 { public static void main(String[] args){ HashMap<String,Integer> hashMap=new HashMap<>(); hashMap.put("年龄",20); hashMap.put("身高",180); hashMap.put("体重",60); System.out.println("键为年龄所对应的值为:"+hashMap.get("年龄")); System.out.println("该map是否包含键为“年龄”?"+hashMap.containsKey("年龄")); System.out.println("该map是否包含键值为90?"+hashMap.containsValue(90)); System.out.println("该map是否为空?"+hashMap.isEmpty()); System.out.println("该map的长度大小为:"+hashMap.size()); System.out.println("移除键为“体重“的键值对"+hashMap.remove("体重")); System.out.println("哈希映射中的内容如下:"+hashMap); Set<String> keys=hashMap.keySet(); Iterator<String> iterator=keys.iterator(); System.out.println("hashmap中的元素如下:"); while(iterator.hasNext()){ String s= iterator.next(); Integer name= hashMap.get(s); System.out.println(s+":"+name); } } }
输出:
键为年龄所对应的值为:20 该map是否包含键为“年龄”?true 该map是否包含键值为90?false 该map是否为空?false 该map的长度大小为:3 移除键为“体重“的键值对60 哈希映射中的内容如下:{年龄=20, 身高=180} hashmap中的元素如下: 年龄:20 身高:180
小tips:在输出map中的元素时,我们不能直接使用iterator[迭代器],对元素进行遍历输出,因为迭代只能用在Set/List这种单列存放数据的集合中,而map是双列的,并且也不能使用foreach语句对map进行输出,因为foreach语句的本质也是迭代,只能用在单列集合中。
LinkedHashMap:
LinkedHashMap有如下特点:
1:LinkedHashMap实现了Map接口 2:LinkedHashMap继承了HashMap,内部还有一个双向链表维护键-值对的顺序,每个键-值对即位于哈希表中,也位于双向链表中 3:LinkedHashMap保存了两种元素顺序,输入顺序和访问顺序,插入顺序是指先添加的元素在前面,后添加的元素在后面,修改对应的元素不会影响元素的顺序,访问顺序指的是get/put操作,对一个键执行put/get操作后,其对应的键-值对会移动到链表末尾,所以最末尾的元素是最近访问的,最开始的是最久没有被访问的 4:LinkedHashMap不是线程安全的,不能用在多线程环境中