Java重点 | Map集合
Map集合
概述
java.util.Map<k,v>集合
Map集合的特点:
1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)。
2.Map集合中的元素,key和value的数据类型可以相同,也可以不同。
3.Map集合中的元素,key是不允许重复的,value是可以重复的。
4.Map集合中的元素,key和value是一一对应。
结构继承图
继承图详细介绍
Map集合介绍:
1、Map集合和Collection集合没有关系。
2、Map集合以key和value的这种键值对的方式存储元素。
3、key和value都是存储java对象的内存地址。
4、所有Map集合的kev特点:无序不可重复的。
Map集合的key和Set集合存储元素特点相同。
HashMap集合介绍:
HashMap集合底层是哈希表数据结构,查询速度快,是非线程安全的。
在JDK8之后,如果哈希表单向链表中元素超过8个,单向链表这种数据结构会变成红黑树数据结构。当红黑树上的节点数量小于6时,会重新把红黑树变成单向链表数据结构。这种方式也是为了提高检索效率,二叉树的检索会再次缩小扫描范围。提高效率。初始化容量16默认加载因子.75
JDK1.8之前:数组+单向链表
JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8):提高查询的速度
HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致
扩容是:扩容之后的容量是原容量的2倍。
LinkedHashMap集合介绍:
1.底层是哈希表+链表(保证迭代的顺序)
2.是一个有序的集合,存储元素和取出元素的顺序是一致的
Hashtable集合介绍:
Hashtable集合底层也是哈希表数据结构,是线程安全的,其中所有的方法都带有 synchronized关键字,效率较低,现在使用较少了,因为控制线程安全有其它更好的方案.
Properties属性类介绍:
Properties是线程安全的,因为继承Hashtable,另外Properties存储元素的时候也是采用key和value的形式存储,并且key和value只支持String类型不支持其它类型。
Properties被称为属性类。
SortedMap集合介绍:
SortedMap集合的key存储元素的特点:
首先是无序不可重复的,另外放在SortedMap集合key部分的元素会自动按照大小顺序排序称为可排序称为可排序的集合。
TreeMap集合底层的数据结构是一个二叉树。
Map接口中常用方法
public V put(K key,V value):
把指定的键与指定的值添加到Map集合中。
public V remove(Object key):
把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值
public V get(Object key):
根据指定的键,在Map集合中获取对应的值。
boolean containsKey(Object key):
判断集合中是否包含指定的键
put方法
public V put(K key,V value):
把指定的键与指定的值添加到Map集合中。
返回值:v
存储键值对的时候,key不重复,返回值v是null。
存储键值对的时候,kev重复,会使用新的value替换map中重复的value,返回被替换的value值。
举例
private static void show01() {
//创建Map集合对象 多态
Map<String,String> map = new HashMap<>() ;
String v1 = map.put("小飞","冰冰1") ;
System.out.println("v1:"+v1); //key不重复,返回值是null。输出:v1:null
String v2 = map.put("小飞","冰冰2") ;
System.out.println("v2:"+v2); //键重复 返回被替换的值。输出:v2:冰冰1
System.out.println(map); // 输出:{小飞=冰冰2}
map.put("冷风","孔晓云");
map.put("杨过","小龙女");
System.out.println(map);//输出:{杨过=小龙女, 小飞=冰冰2, 冷风=孔晓云}
}
remove方法
public V remove(Object key):
把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
返回值:V
key存在,v返回被删除的值。
key不存在,v返回null。
举例
private static void show02() {
//创建Map集合对象
Map<String,Integer> map = new HashMap<>();
map.put("丽颖",168);
map.put("音",165);
map.put("玲",178);
System.out.println(map); //{玲=178, 丽颖=168, 音=165}
Integer v1 = map.remove("玲");
System.out.println("v1:"+v1); //v1:178 key存在,返回被删除的值
System.out.println(map); //{丽颖=168, 音=165}
Integer v2 = map.remove("林志");
System.out.println("v2:"+v2);//v2:null key不存在 返回null
System.out.println(map); //{丽颖=168, 音=165}
// 注意问题 :多使用包装类接收,少使用基本数据类型
}
get方法
public V get(Object key):
根据指定的键,在Map集合中获取对应的值。
返回值:key存在,返回对应的value值。key不存在,返回null。
举例
private static void show03() {
//创建Map集合对象
Map<String,Integer> map = new HashMap<>();
map.put("丽颖",168);
map.put("音",165);
map.put("玲",178);
Integer v1 = map.get("丽颖");
System.out.println("v1:"+v1);// v1:168 有对应的key返回对应的值
Integer v2 = map.get("热巴");
System.out.println("v2:"+v2); //v2:null 没有对应的key返回null
}
containsKey方法
boolean containsKey(Object key):
判断集合中是否包含指定的键,包含返回true,不包含返回false
举例
private static void show04() {
//创建Map集合对象
Map<String,Integer> map = new HashMap<>();
map.put("丽颖",168);
map.put("音",165);
map.put("玲",178);
boolean v1 = map.containsKey("丽颖");
System.out.println("v1:"+v1); //v1:true 有这个key 返回ture
boolean v2 = map.containsKey("颖");
System.out.println("v2:"+v2); //v2:false 没有这个key 返回false
}
- 点赞
- 收藏
- 关注作者
评论(0)