【数据结构】HashMap和HashSet

Map和Set是一种专门用来搜索的数据结构

搜索的数据称为关键字(Key)和其关键字对应的值(Value),而Key-Value则称为键值对

Map中储存的是key-value键值对,而Set中只存储了Key

Map

  • Map其中存储的是<K,V>键值对,并且Key一定唯一的,不得有重复值,而Value是可以重复的,若进行存储的时候Key值发生了重复,则该Key值所对应的Value值会被替换成新的Value
  • Map是一个接口类,不能直接实例化对象,只能实例化其实现类TreeMap或HashMap如
    Map<Integer,Integer> map1 = new TreeMap<>();   //实例化TreeMap
    Map<Integer,Integer> map2 = new HashMap<>();   //实例化HashMap
    
  • Map中的Value可以修改,如果要修改Key,只能先将该键值对删除掉,再重新插入
  • Map中的Key可以分离出来,存储到Set中(因为Key不能重复)
  • Map中的Value可以分离出来,存储到Collection的子集合中(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<K> keySet()返回所有 key 的不重复集合
    Collection<V> values() 返回所有 value 的可重复集合
    Set<Map.Entry<K, V>> entrySet() 返回所有的 key-value 映射关系
    boolean containsKey(Object key) 判断是否包含 key
    boolean containsValue(Object value)判断是否包含 value
  • TreeMap和HashMap的区别

    Map底层结构TreeMapHashMap
    底层结构红黑树

    哈希桶

    查询时间复杂度O(log2N)O(1)
    是否有序关于Key有序无序
    线程安全不安全不安全
    查找区别需要进行元素比较通过哈希函数计算哈希地址
    比较与重写key必须能够比较,否则会抛出
    ClassCastException异常

    自定义类型需要覆写equals和
    hashCode方法

    应用场景需要Key有序场景下Key是否有序不关心,追求时间性能

Set

  •  Set是继承自Collection的一个接口类
  • Set中只存储了Key,且Key是唯一的
  • Set中不能插入null的Key 
  • TreeSet和HashSet性质与Map相似
  • Set常用方法
    方法解释
    boolean add(E e)添加元素,但重复元素不会被添加成功
    void clear()清空集合
    boolean contains(Object o)判断 o 是否在集合中
    Iterator<E> 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中,可以达到去重的效果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值