Map多知识点合一

9 篇文章 0 订阅
9 篇文章 0 订阅
映射==> 一一对应 -->java.util.Map接口

单列集合Collection中的集合==> 元素是孤立存在的,元素采取单独存储方式
双列集合Map中的集合==> 元素是承兑存在的,每个元素有键与值两部分组成-->可以通过键找对应的值(key-value)

Map的集合 不能包含重复的键 , 值可以重复 ,但是键只能对应一个值

Map集合


Map接口常用方法

void clear() ==> 删除Map对象中所有key-value对
boolean containsKey (Object key) ==>查询Map中是否包含指定key包含,返回true
boolean containValue (Object value)==> 查询Map是否包含一个或者多个value
Set entrySet() ==> 返回Map中所包含Set-value对应的Set集合,每个集合元素都是Map.Entry(Enty是Map的内部类)对象
boolean isEmpty() ==> 查询
public V put(K key,V value) ==>指定的键与指定的值添加到Map集合中
相同的键不存储,值覆盖 -->如果没有产生覆盖的效果,返回值null,如果产生了覆盖的效果,那么返回值就是被覆盖的值
public V remove(Object key) ==>指定的键和所对应的键值,在Map集合中删除,返回被删除元素的值 --》 根据键删除值
public C values() ==> 返回值
public int size() ==> 长度

public V get (Object key) ==>根据指定的键,在Map集合中获取对应的值
public Set<K> keySet() ==>获取Map集合中所有的键,存储到Set集合中
public Set<Map.Entry<K,V>> entrySet() ==>获取到Map集合中所有的键值对对象的集合(Set)

遍历键找值方式

(Map集合 没有iterator方法)

1.Set<K> keySet(); --> 获取Map中所有键==>返回 一个Set集合存储 所有的键
2.遍历键的Set集合
3.根据键,获取键所对应的值


(后期用的比较多)
Set<String> keySet = map.keySet ();// 获取所有键的集合

迭代器遍历

Iterator<String> it = keySet.iterator();//Set集合即具有迭代器,调用迭代器
while(it.hasNext()){
//
String key = it.next(); //获取每一个键
Integer value = map.get(key); //根据键获取值
sout(key + "==" +value);
}

增强for循环

for(String key : map.keySet()-->所有键的集合){
sout(key + map.get(key));
}

Entry

key和value在Map中是一一对应关系,被 称作Map中的一个Entry项

Entry将键值对的对应关系, 封装成了对象,即键值对对象

方法:

public K getKey();==> 获取Entry对象的键
public V getValue==> 获取Entry对象的值
Object setValue(V value) ==> 设置该Entry里包含的value值,放回新设置的value

public Set< Map.Entry<K,V> > entrySet()==> 获取Map集合中所有键值对对象的集合

Map.Entry<K,V> ==> Entry<K,V>是Map内部接口(将键和值封装成了Entry对象,存储在Set中)

遍历键值对

1.获取集合中所有键值对对象,以Set几何形式返回 ==> entrySet()
2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对对象
3.通过键值对对象,获取entry对象中的键与值 ==> getkey()/getValue()

JDK9对集合添加的优化
1:of()方法只是Map,List,Set这三个接口的静态方法,其父类接口和子类实现并没有这类方法,比如 HashSet,ArrayList等待;
2:返回的集合是不可变的;

Map常用的子类

HashMap<K,V> ==> 存储数据采用的哈希表结构,元素的存取顺序 不能保证 一致,由于要保证键的唯一,不重复, 需要重写hashCode方法,equals方法

其子类--> LinkedHashMap<K,V> ==> 存储数据采用 哈希表结构和链表结构 , 通过链表结构 保证元素存取顺序一致 ,通过哈希表结构可以保证键的唯一/不重复,需要重写hashCode/equals方法
tips: 两个泛型在使用时,要为两个泛型富裕数据类型,可以相同也可以不同

Hashtable 和 HashMap区别
都是哈希算法,都是双列集合
1.Hashtable 线程安全,效率低,jdk1.0版本,HashMap线程不安全,效率高,jdk1.2版本
2.Hashtable不允许使用null作为key和value,HashMap允许

--(HashMap只允许一项key-value的key值为null,但可以有无数多项key-value的value为null)--

两者判断value相等标准: 两个key通过equals方法比较返回true,两个key的hashCode值也相等

jdk9新特性

--> 在list、set、map接口提供了静态of方法,可以直接创建带有少量元素的集合
--> 在以上接口的实现类中没有此方法
--> 通过这个of方法创建出来的集合是不可修改的(比如不能往集合中添加元素)

Properties是Hashtable子类:...

bug

--> 本意指虫子,在计算机世界中,指出现问题
--> debug解决bug
--> 断点 -> 让程序在运行的时候停下来

如何加断电:哪一行停下来,就在哪一行单击;

SortedMap接口和TreeMap

Map接口派生子接口SortedMap,TreeMap实现类-->基于红黑树对TreeMap中所有key排序,保证key-value处于有序状态
排序方式

1.自然排序: TreeMap所有key必须实现Comparable接口,key应是同一类的对象,否咋ClassCaseException异常
2,定制排序: 创建TreeMap时,传入Comparator对象,负责对TreeMap中所有key排序,采用地址顺序不要求Map实现Comparable接口

TreeMap判断key相等的标准:key通过equals比较返回true,通过compareTo返回0
--(自定义类作为key时,应重写equals和compareTo方法返回结果一直)--

其他实现类
WeakHashMap ==> 与HashMap用法基本一致,区别在于,HashMap的key保留对实际对象的强引用,即,只要该HashMap对象不被销毁,其hey所引用对象不会被垃圾回收,,,但WeakHashMap只保留弱引用,这意味着该HashMap对象可能被垃圾回收,也可能被自动删除
IdentityHashMap ==> 在两个key相等时比较独特,当且仅当两个key严格相等,该类才认为两个key相等
EnumMap ==> 与枚举类以其使用的Map实现

所有Map实现类都重写了toString方法


方法





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值