• 第四天:java基础复习(集合)


    Map

    Map

            格式:,K键,V值;将键映射到值,不能包含重复的键,每个键只能映射一个值,当输入重复键时,会进行替换;

            创建:以多态的方式;

            具体实现:HashMap   Map map = new HashMap();

    TreeMap

            可以比较元素大小的Map集合,会对传入的Key进行大小的排序;可以使用元素的自然排序,也可以使用集合中自定义的比较容器来进行排序;

    特点:

            不允许重复键;

            可以插入null,键和值都可以;

            可对元素进行排序;

            无序集合,插入和遍历顺序不一致;

    基本操作:

    1. 1、遍历元素
    2. Set> entrySet = treeMap.entrySet();
    3. 2、获取所有key
    4. Set keySet = treeMap.keySet();
    5. 3、获取所有value
    6. Collection valueList = treeMap.values();
    7. 4、获取集合内第一个元素
    8. String firstKey = treeMap.firstKey();
    9. 5、获取集合内最后一个元素
    10. String lastKey =treeMap.lastKey();

    排序:

            自然元素排序:需要让被比较的元素实现Comparable接口,这是因为在调用put()方法时,会将传入的元素转化为Comparable类型对象;

    1. TreeMap treeMapFirst = new TreeMap();
    2. treeMapFirst.put(1,"huangqiuping");
    3. treeMapFirst.put(6,"huangqiuping");
    4. treeMapFirst.put(3,"huangqiuping");
    5. System.out.println(treeMapFirst.toString());
    6. 结果:{1=huangqiuping, 3=huangqiuping, 6=huangqiuping}

            使用自定义比较器比较:需要在创建treeMap对象时,将自定义比较器对象传到treeMap构造方法中;需要实现Comparator接口,并实现比较方法compare(to1,to2);

    1. public class SortedTestComparator implements Comparator {
    2.     //自定义比较器:实现compare(To1,To2)方法:
    3.     public int compare(SortedTest sortedTest1, SortedTest sortedTest2) {
    4.         int num = sortedTest1.getAge() - sortedTest2.getAge();
    5.         if(num==0){//为0时候,两者相同:
    6.             return 0;
    7.         }else if(num>0){//大于0时,后面的参数小:
    8.             return 1;
    9.         }else{//小于0时,前面的参数小:
    10.             return -1;
    11.         }
    12.     }
    13. }

    HashMap

            用于存储K-V键值对的集合,每一个元素的初始值都是Null,无序的;

            常用方法:put() 、get()

            HashMap默认的长度为16,拓展或初始化长度必须是2的幂(确定位置时,碰撞概率会比较低)

            put过程:

                    1、对Key求Hash值,然后再计算下标
                    2、如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的Hash值相同,需要放到同一个bucket中)
                    3、如果碰撞了,以链表的方式链接到后面
                    4、如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表
                    5、如果节点已经存在就替换旧值
                    6、如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排)
                    查找时调用hash方法,找到具体的key所对应的hash,然后再到entry中去找value

    比较:

    HaspMaptreeMap
    无序有序
    查询速度更快查询速度慢
    适合插入、删除、查找适合排序
    非线程安全非线程安全
    输出结果无序输出结果已排序
    数组+链表+红黑树红黑树

    List

            List是一个接口,继承于Collection;元素可以重复,有序存储(按照插入顺序进行有效存储),可以添加null。

    ArrayList

            底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素;ArrayList更适合检索和在末尾插入或删除。初始容量为10.

    常用方法:

    方法作用
    add(E)添加元素
    set(int index,E element)覆盖指定位置的元素
    remove(int index)删除指定位置的元素
    get(int index)获取指定位置的元素
    indexOf(Object o)获取指定位置的索引
    iterator()获取迭代器
    size()获取集合大小
    isEmpty()判断集合是否为空
    clear()清空集合
    stream()为集合创建流

    LinkedList

            底层数据结构是双向链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素;inkedList更适合从中间插入或者删除

    常用方法:

    方法作用
    getFirst返回此列表中的第一个元素。
    getLast返回此列表中的最后一个元素。
    removeFirst从此列表中删除并返回第一个元素。
    removeLast从此列表中删除并返回最后一个元素。
    add将指定的元素追加到此列表的末尾。
    addFirst在该列表开头插入指定的元素。
    size返回此列表中的元素数。
    clear从列表中删除所有元素。 此呼叫返回后,列表将为空。
    contains如果此列表包含指定的元素,则返回true`
    listIterator从列表中的指定位置开始,返回此列表中元素的列表迭代器(按适当的顺序)。
    straem为集合创建流

    Vector

            底层数据结构是数组,查询快、增删慢,线程安全(大部分的方法都包含关键字synchronized),效率低,可以存储重复元素;如果涉及到多线程,选择Vector

    1. 1、添加 addFirst() addLast()
    2. 2、删除 removerFirst() removerLast()
    3. 3、获取 getFirst() getLast()

    比较

    ArrayListLinkedListVector
    线程不安全,效率高线程不安全,效率高线程安全,效率低
    数组链表数组
    查询快,增删慢查询慢,增删快查询快,增删慢

    Set

            treeMap主要功能用于排序;LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出);HashSet只是通用的存储数据的集合;

    HashSet

            底层采用二叉树,元素无序且唯一,线程不安全,效率高,可以存储null元素;

    常用方法:

    方法作用
    add添加元素
    containsKey(Object)查询集合中是否包含指定键
    remove(Object)删除指定键
    iteartor迭代器
    size()获取集合大小
    isEmpty()判断集合是否为空
    clear()清空集合

    LinkedHashSet

            底层采用链表和Hash表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高;

    常用方法:

    方法作用
    add添加元素
    containsKey(Object)查询集合中是否包含指定键
    remove(Object)删除指定键
    iteartor迭代器
    size()获取集合大小
    isEmpty()判断集合是否为空
    clear()清空集合

    TreeSet

            底层采用二叉树实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性;

    常用方法:

    方法作用
    add添加元素
    containsKey(Object)查询集合中是否包含指定键
    remove(Object)删除指定键
    iteartor迭代器
    size()获取集合大小
    isEmpty()判断集合是否为空
    clear()清空集合
    descendingIterator倒叙遍历

    比较

    HashSetLinkedHashSetTreeSet
    实现Set接口实现Set接口实现Set接口
    线程不安全线程不安全线程不安全
    添加、查询快添加、修改、删除快;有序只有需要对元素进行排序时使用
    数组+链表+红黑树哈希表+双向链表红黑树
    可以有null值可以有null值可以有null值

    List与Set的区别

            1、List中元素可以重复,并且是有序的(按照插入的顺序进行存储);Set中的元素是不可重复的(重复元素会被覆盖掉),并且无序。

            2、List和Set都继承Collection接口;

            3、Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变

  • 相关阅读:
    csp 2022 总结
    使用printJS插件打印
    CSC青年骨干教师项目教师节当天开始申报
    PB转纯BS工具
    spark-sql sql on yarn --deploy-mode cluster 改造
    m基于MIMO中继通信和非规则LDPC编译码的matlab仿真,其中波束形成为SVD,MMSE,中继包括AF,DF,CF
    【微信公众号】微信 jsapi 支付大概流程
    JDK11优化了哪些功能以及新增了哪些特性功能|JDK各个版本的特性分析
    Error checking compiler version for cl: [WinError 2] 系统找 不到指定的文件[已解决]
    最新AI智能写作创作系统源码V2.6.4/AI绘画系统/支持GPT联网提问/支持Prompt应用
  • 原文地址:https://blog.csdn.net/qq_35056891/article/details/126468364