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):将集合中的元素按照指定的规则进行排序

 

posted @ 2020-12-03 22:21  wajueji  阅读(140)  评论(0编辑  收藏  举报