1.Map
(1)概述
现实生活中,我们常会看到这样的一种集合: IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等
这种一对应的关系 ,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接
口。
public interface Map<K,v>
java. util.Map<k, v>集合
Map集合的特点:
1.Map集合是一个双列集合,一个元素包含两个值(一 个key, 一个value)
2.Map集合中的元素, key和value的数据类型可以相同,也可以不同
3. Map集合中的元素, key是不允许重复的, value是可以重复的
4.Map集合中的元素, key和value是一一对应
map与collection的区别
Collection中的集合,元素是孤立存在的(理解为单身) ,向集合中存储元素采用一个一个元素的方式存储。
Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Collection中的集合称为单列集合,Map 中的集合称为双列集合。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map常用子类
●HashMap<K,V> :存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、 不重
复,需要重写键的hashCode()方法、equals()方法。
●LinkedHashMap<K,V> : HashMap下有个子类LinkedHashMap ,存储数据采用的哈希表结构+链表结构。
通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复 ,需要重写键的
hashCode()方法、equal)方法。
Map中常用方法
1.public v put(K key, v value) ;把指定的键与指定的值添加到Map集合中。
存储键值对的时候, key不重复返回值v是null
存储键值对的时候, key重复,会使用新的value替换map中重复的value,返回被替换的value值
Map<String,String> map=new HashMap<>;
map.put("杨过","小龙女");
System.out.println(map);
运行结果:{杨过=小龙女}
2.public V remove(object key) :把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
返回值;V
key存在, v返回被删除的值。 key不存在, v返回null
//创建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( key: "林志玲");
System.out . println("v1:" +v1); //v1:178
System. out . println(map); //{赵丽颖-168,杨颖=165}|
3.public V get(Object key)根据指定的键,在Map集合中获取对应的值。
key存在,返回对应的value,key不存在返回null
//创建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:165
Integer v2 = map. get("迪丽热巴");
System.out . println("v2: " +v2); //v2:null
4.boolean containsKey(Object key)判断集合中是否包含指定的键。
包含返回true,不包含返回false
//创建Map集合对象
Map<String, Integer> map = new HashMap<>( );
map . put( "赵丽颖" ,168);
map. put("杨颖" ,165);
map. put(“林志玲" ,178);
boolean b1 = map. containsKey( '赵丽颖");
System. out. println("b1:”+b1); //b1: true
boolean b2 = map. containsKey( "张无忌");
System. out . println( "b2:"+b2); //b2:false
5.public Set<K> keySet() :获取Map集合中所有的键,存储到Set集合中。
Map集合的第一种遍历方式 :通过键找值的方式
Map集合中的方法:
Set<K> keySet() 返回此映射中包含的键的Set视图。
实现步骤:
1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
2.遍历set集合,获取Map集合中的每一个key
3.通过Map集合中的方法get(key),通过key找到value
6.public Set<Map. Entry<K,V>> entrySet() :获取到Map集合中所有的键值对对象的集合(Set集合)。
我们已经知道,Map 中存放的是两种对象, 一种称为key(键) ,一种称为value(值) .它们在Map中是一对对应关
系,这一对对象又称做Map中的一一个Entry(项)。Entry 将键值对的对应关系封装成了对象。即键值对对象,这
样我们在遍历Map集合时,就可以从每一个键值对( Entry)对象中获取对应的键与对应的值。
既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:
public K getKey()]:获取Entry对象中的键。
public V getValue() :获取Entry对象中的值。
在Map集合中也提供了获取所有Entry对象的方法:
public Set<Map. Entry<K,V>> entrySet() :获取到Map集合中所有的键值对对象的集合(Set集合)。
Map集合的第二中遍历
Map集合遍历的第二种方式:使用Entry对象遍历
Map集合中的方法:
Set<Map. Entry<K, V>> entrySet() 返回此映射中包含的映射关系的Set视图。
实现步骤:
1.使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
2.遍历Set集合,获取每一个Entry对象
3.使用Entry对象中的方法getKey( )和getVolue()获取键与值
使用for each遍历
2.HashMap
java. util . HashMap<k, v>集合implements Map<k, v>接口
HashMap集合的特点:
1.HashMap集合底层是哈希表:查询的速度特别的快
JDK1.8之前:数组+单向链表
JDK1. 8之后:数组+单向链表/红黑树(链表的长度超过8) :提高查询的速度
2. hashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致
HashMap存储自定义类型(自定义类型作为value)
HashMap存储自定义类型(自定义类型作为key)
HashMap存储自定义类型键值
key:Person类型
Person类就必须重写hashCode方法和equals方法,以保证key唯一
value:String类型
可以重复
3.LinkedHashMap
java. util. inkedHashMap<k, v>集合extends HashMap<k, v>集合
LinkedHashMap的特点:
1.L inkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
2. L inkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的
底层原理:
哈希表+链表(记录元素的顺序)
key不允许重复,有序
4.Hashtable集合(被HashMap取代)
java. util. Hashtable<K, V>集合implements Mop<K, V>接口
Hashtable:底层也是- -个哈希表,是一个线程安全的集合,是单线程集合,速度慢
HashMop:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
HashMap集合(之前学的所有的集合):可以存储null值, null键
Hashtable集合,不能存储null值, null键
Hashtable和Vector集合一样在jdk1 .2版本之后被更先进的集合(HashMap, Arraylist)取代了
Hashtable的子类Properties依然活跃在历史舞台
Properties集合是一个唯一和I0流相结合的集合