zoukankan      html  css  js  c++  java
  • day19_ LinkedList HashSet LinkHashSet 可变参数 Collection集合工具类

    今日内容

    • List集合

    • Set集合

    • 可变参数

    • Collections集合工具类

    List集合

      LinkedList集合

        LinkedList集合是双向链表结构,方便元素添加和删除。链表集合元素大多采用首尾结点操作。

      1.LinkedList集合独有的常用API

    备注:LinkedList是List的子类,list所有的方法他都能使用


    public
    void addFirst(E e):将指定的元素添加到此列表的开头 public void addLast(E e): 将指定的元素添加到此列表的结尾 public E getFirst(): 获取此列表的首结点元素 public E getLast(): 获取此列表的尾结点元素 public E removeFirst():删除此列表首结点元素 public E removeLast():删除此列表尾结点元素 public E pop():从此列表所表示的堆栈中弹出一个元素(首结点) public void push(E e): 将此元素推入此列表所表示的堆栈中(首结点) public boolean isEmpty(): 如果此列表不包含任何元素,则返回true

    Set接口

      2.Set接口

      java.util.Set接口继承自Collection类,比Collection接口更加严格,Set内的元素无重复,无序(这里的无序指的是元素存取顺序不一致)

    主要介绍HashSet集合和LinkedHashSet集合

    Set集合的元素取出方式为:迭代器和增强for循环

      3.HashSet集合

      java.util.HashSet是Set接口的实现类,元素无重复,无序。底层是HashMap支持。

      HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此有良好的存取和查找性能。

      保证元素唯一性的方法依赖于hashCode和equals方法

        3.1HashSet组成

    在JDK1.8之前,底层采用数组+链表实现,只使用哈希链表处理哈希冲突,同一个哈希值的链表都存储在同一个链表里,如果一个链表里的元素较多的时候(即哈希值相等的元素),通过key值(HashMap键值对)依次查找的效率很低下。
    JDK1.8后哈希表采用数组+链表/红黑树实现,当链表的长度超过阈值(8)时,将链表自动转换成红黑树结构,大大提高查找时间。

        3.2HashSet添加过程:

    add方法会先调用s1的方法,计算s1(“abc”)的哈希值,哈希值是96354,如果要添加s2,先在集合中查找有没有96354这个哈希值的元素,没有的话就把他存储到集合里面,如果有(会发生哈希冲突),s2紧接着会调用equals方法和哈希值相同的元素做比较,即:s2.equals(s1),如果两个元素的哈希值相同,并且equals方法的返回值是true,就会认为两个元素相同,就不会把s2的元素存进集合当中,如果两个元素哈希值相同,且equals方法返值是false,就会把s2元素放进集合的链表当中
    
    JDK1.8之后的红黑树大大优化了HashMap的性能,保证HashSet元素唯一性,主要是通过hashCode和equals方法来保证,如果我们存储自定义的对象,需要保证对象的唯一性,就必须重写HashCode和equals方法来自定义当前的比较方式。

     

      4.LinkHashSet集合

        HashSet存入元素没有顺序,它的子类java.util.LinkedHashSet是有序的,他是链表和哈希表的组合的一个数据存储结构。

        LinkedHashSet和HashSet的区别就是有序

    有序证明
            //构建一个LinkedHashSet集合对象
            LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
            linkedHashSet.add("www");
            linkedHashSet.add("zhiyou100");
            linkedHashSet.add("com");
            linkedHashSet.add("abc");
            linkedHashSet.add("abc");
            linkedHashSet.add("java");
            linkedHashSet.add("python");
           // [www, zhiyou100, com, abc, java, python]
            System.out.println(linkedHashSet);//[www, zhiyou100, com, abc]   有序的,不重复的

    可变参数

    可变参数是JDK1.5之后出现

    一个方法需要接受多个参数,并且数据类型一致的话,可以使用可变参数。

      5.可变参数格式

    修饰符  返回值类型  方法名(参数列表...形参名){
    //.....
    }

    该格式等同于
    修饰符 返回值类型 方法名(参数类型[] 参数名){
    //....
    }

    前者可以直接传递参数,后者必须传递一个数组类型

      6.可变参数的注意事项

    1.一个方法的参数列表只能有一个可变参数
    2.如果方法的参数有多个,类型不止一种,那么可变参数必须写在参数列表的末位位置。

      Collections集合工具类

      java.util.Collections 是一个工具类,用来操作集合中的元素

      7.Collections常用API方法

    public static <T> boolean addAll(Collection<? super T>c,T...elements):往集合中一次性添加多个元素
    
    public static <T> void shuffle(List<?> list):将集合中的元素顺序打乱
    
    public static <T> void sort(List<T> list):将集合中的元素按照默认规则排序
    
    public static <T> void sort(List<T> list,Comparator<? super T>c):将集合中的元素按照指定的规则进行排序
  • 相关阅读:
    A. k-rounding
    哗啦啦村的刁难(4)
    喵哈哈村的种花魔法
    喵哈哈村的赛马比赛
    喵哈哈村的括号序列
    喵哈哈村的排队
    python中递归调用
    python-中函数的参数
    shell中参数及带色彩打印
    python-文件读写
  • 原文地址:https://www.cnblogs.com/rxqq/p/14083310.html
Copyright © 2011-2022 走看看