Java——Map,Set

Map

概念

是一个接口类,并没有继承自Collection,其中存储<K,V>,意思是key和value,其中key不能重复,value可以重复
key被称之为关键字,value被称之为值,而他们的组合被称之为键值对

Map.Entry<K,V>

是Map的内部类,用来存放键值对的映射关系

方法解释
K getKey()返回 entry 中的 key
V getValue()返回 entry 中的 value
V setValue(V value)将键值对中的value替换为指定value

Map的常用方法

方法解释
V get(Object key)返回 key 对应的 value
V getOrDefault(Object key, V defaultValue)返回 key 对应的 value,key 不存在,返回默认值
V put(K key, V value)设置 key 对应的 value
V remove(Object key)删除 key 对应的映射关系
Set keySet()返回所有 key 的不重复集合
Collection values()返回所有 value 的可重复集合
Set<Map.Entry<K, V>> entrySet()返回所有的 key-value 映射关系
boolean containsKey(Object key)判断是否包含 key
boolean containsValue(Object value)判断是否包含 value

需要注意的是:

  1. Map只是一个接口,要实例化的话应该选择TreeMap或HashMap
  2. Map中的key可以分离出来放到Set中
  3. Map中的value可以分离出来放到Collection中
  4. Map中的key无法直接修改,可以先删除再进行增加

HashMap和TreeMap的区别

Map底层结构TreeMapHashMap
底层结构红黑树哈希桶
插入/删除/查找 时间复杂度O(log N)O(1)
是否有序关于Key有序无序
线程安全不安全不安全
插入/删除/查找区别需要进行元素比较通过哈希函数计算哈希地址
比较与覆写key必须能够比较,否则会抛出ClassCastException异常自定义类型需要覆写equals和 hashCode方法
应用场景需要Key有序场景下Key是否有序不关心,需要更高的时间性能

Set

概念

Set继承了Collection,其中只存储了Key,并且Set中不存储重复的数据

Set的常用方法

方法解释
boolean add(E e)添加元素,但重复元素不会被添加成功
void clear()清空集合
boolean contains(Object o)判断 o 是否在集合中
Iterator iterator()返回迭代器
boolean remove(Object o)删除集合中的 o
int size()返回set中元素的个数
boolean isEmpty()检测set是否为空,空返回true,否则返回false
Object[] toArray()将set中的元素转换为数组返回
boolean containsAll(Collection<?> c)集合c中的元素是否在set中全部存在,是返回true,否则返回 false
boolean addAll(Collection<? extends E> c)将集合c中的元素添加到set中,可以达到去重的效果

注意:

  1. Set底层使用Map实现的,其Key值是一个Object的默认对象
  2. 和Map一样,Set实现的接口有TreeSet和HashSet,除此之外还有LinkedHashSet,其是在HashSet的基础上维护了一个双向链表记录元素的插入顺序
  3. 和Map一样,Set的key也不能直接修改
  4. Set中不能插入null

TreeSet和HashSet的比较

和HashMap与TreeMap的区别与特性一致,可以参考上面的表格

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值