Map 和 Set(说明、常用方法) --- Java内功心法

目录

1.前言:

1.1概念及使用场景:      

1.2模型:

2.Map:

2.1关于Map的说明:

2.2 关于Map.Entry的说明,>

2.3Map常用方法:

3.Set:

3.1关于Set:

3.2Set的常用方法:

3.3Set的详细说明:


1.前言:

1.1概念及使用场景:      

  Map和Set是一种专门用来进行搜索的容器或数据结构,其搜索的效率和其具体实例化的子类有关。

        我们之前学到的常用的搜索方法有:

        1.直接遍历,时间复杂度为O(N)。

        2.二分查找法,时间复杂度为O(log_2{N})

        这两种搜索方法比较适合静态类型的搜索,一般不进行插入或删除操作。那么如果我们要频繁地对元素进行插入或删除操作,然后进行查询(即动态查询),就可以用到Map和Set了。

1.2模型:

        一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对:

        1.纯Key模型:

        只有关键字,一般用于查询这个key在不在某个集合中。

        2.Key-Value模型:

        有关键字也有其相对应的值,一般可用于字典,key做英文,value作为作为进行查询。

Set使用的就算纯Key模型,而Map使用的就算Key-Value模型~~

2.Map:

2.1关于Map的说明:

1.Map是一个接口类,没有继承自Collection,不能直接实例化其对象,如果要实例化对象,只能实例化其子类对象HashMap或者TreeMap。

2.Map中存储的是Key-Value键值对,且Key的值是唯一的,不能重复。

3.在TreeMap中,Key不能为空,否则会抛NullPointerException异常,但是Value值可以为空。在HashMap中Key和Value的值都可以为空。

4.Map中的Key是可以分离出来存放到Set中的,因为Key值是唯一的。

5.Map中的Value是可以分离出来存放到Collection的任意一个子集合中的。

 6.Map中的Key值不能修改,而Value值可以修改,如果要修改Key值,则要先删除Key,再插入Key。

7.TreeMap和HashMap的区别:

Map底层结构TreeMapHashMap
底层结构红黑树Hash桶
插入/删除/查找时间 复杂度O(log_2{N})O(1)
是否有序关于Key有序无序
线程安全不安全不安全
插入/删除/查找区别需要进行元素比较需要通过hash函数计算hash地址
比较与覆写key必须要可以比较,(基于Comparable或者基于比较器)否则会抛ClassCastException异常需要重写equals方法和hashCode方法
应用场景需要Key在有序的场景下不关心Key是否有序,需要更高的性能

2.2 关于Map.Entry<K, V>的说明

        Map.Entry <K, V>是Map内部实现的用来存放键值对映射关系的内部类,该内部类中主要提供了 的获取,value的设置以及Key的比较方式。

源码:

    interface Entry<K,V> {

        K getKey();

        V getValue();

        V setValue(V value);

        boolean equals(Object o);

        int hashCode();

        public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() {
            return (Comparator<Map.Entry<K, V>> & Serializable)
                (c1, c2) -> c1.getKey().compareTo(c2.getKey());
        }

可以看出源码并没有提供setKey()的方法。

2.3Map常用方法:

方法功能
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

3.Set:

3.1关于Set:

 Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。

3.2Set的常用方法:

方法功能
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中,可以达到去重的效果

3.3Set的详细说明:

1.Set是继承自Collection的接口类。

2.Set的Key必须是唯一的,不能重复的。

3.TreeSet的底层使用Map实现的,其使用Key和Object的一个默认对象作为键值对插入到Map中。

4.Set最大的作用就是去重。

5.Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入。

6.TreeSet中不能插入null做Key,而HashMap可以。

7.实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础 上维护了一个双向链表来记录元素的插入次序。

8.TreeSet与HashSet的区别:

Set底层结构TreeSet

HashSet

底层结构红黑树Hash桶
插入/删除/查找时间 复杂度O(log_2{N})O(1)
是否有序关于Key有序无序
线程安全不安全不安全
插入/删除/查找区别按照红黑树的特性进行需要先计算Hash地址
比较与覆写key必须要可以比较,(基于Comparable或者基于比较器)否则会抛ClassCastException异常需要覆写equals方法和hashCode方法
应用场景需要Key有序的情况下需要更高的时间性能

不怕溺于尘埃人海,只愿灵魂永站高台_哔哩哔哩_bilibili

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值