集合

LinkedList集合

​ java.util.LinkedList 集合数据存储的结构底层是一个链表结构,是一个双向链表结构,方便元素的添加和删除

我们在开发中对一个链表集合中的元素大量的都是采用首尾结点操作(添加和删除);常用的API如下

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

LinkedList是List的子类,List当中的方法LinkedList都是可以使用的

Set

​ java.util.Set 接口和 java.util.list接口是一样的,都是继承Collection接口,它与Collection接口中的方法基本一样,没有对collection接口进行功能上的扩展,只是比collection接口更加严格与list接口不同的是,Set接口中的元素是无序的,并且都会以某种规则保证存入的元素不重复。

Set接口有很多个子类,我们主要介绍两个重要子类:java.util.HashSet和java.util.LinkedHashSet集合

Set集合取出元素的方式可以采用:迭代器、增强for循环。

HashSet集合介绍

java.util.HashSet 是Set接口的一个实现类,它存储的元素是不可重复的,并且元素都是无序的(存取顺序不一致)

java.util.HashSet 底层的实现其实是一个java.util.HashMap支持的

HashSet是根据对象的哈希值来确定元素在集合当中的存储位置,因此它具有良好的存取和查找性能,保证元素唯一性的方式依赖于hashCode和equals方法

HashSet集合存储数据的结构(哈希表)

什么是哈希表呢?

在JDK1.8之前,哈希表的底层采用的是数组+链表实现,即使用链表处理哈希冲突问题,同一哈希值的链表都存储在一个链表里,但是当位于一个链中的元素较多时,即hash值相等的元素较多时,通过key值依次查找的效率很低下,在JDK1.8中,哈希表存储结构采用数组+链表/红黑树实现的,当链表的长度超过阈值(8)时,将链表转换成红黑树结构,这样大大减少了查找的时间

哈希表链表红黑树

总而言之JDK1.8之后引入了红黑树结构大大优化了HashMap的性能,那么对于我们来讲保证HashSet元素唯一不重复,其实是根据对象的hashCode和equals方法来决定的,如果我们往集合当中存储的是自定义的对象,需要保证对象的唯一性,就必须重写HashCode和equals方法,来自定义当前对象的比较方式。

HashSet存储自定义类型的元素

一般需要重写对象当中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合当中的元素的唯一性。

LinkedHashSet集合

我们知道HashSet保证元素的唯一,可是存进去的元素是没有顺序的,那么如何保证存进去的元素是有序的?

在java.util.HashSet类的下面还有一个子类java.util.LinkedHashSet,它是链表和哈希表的组合的一个数据存储结构。

可变参数

在JDK1.5之后,如果我们定义一个方法需要接收多个参数并且多个参数的数据类型一致,那么我们可以简化成如下格式:

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

其实上面的格式完全等价于:

修饰符 返回值类型 方法名(参数类型[] 参数名){
    //。。。
}

只是后面的写法,在方法调用时,必须传递一个数组类型,而前者可以直接传递参数数据

JDK1.5之后,出现的这种简化操作“...”用在参数上,我们称之为可变参数

同样是代表数组,但是在方法调用这个带有可变参数时,不用创建数组,而是直接将数组当中的元素作为实际参数进行传递

其实编译生成的class文件,本质是将这些元素封装到了一个数组当中,再进行数据传递,这些动作都在编译生成.class文件的时候,自动完成了。

	 * 可变参数的注意事项
	 * 1.一个方法的参数列表只能有一个可变化量
	 * 2.如果方法的参数有多个,类型不止一种,那么可变参数必须写在参数列表的末尾位置
Collection集合工具类
常用功能

java.util.Collections 是集合工具类,用来操作集合对象中的元素,方法如下:

public static boolean addAll(Collection<?super T>,T...elements):往集合中一次性添加多个元素

public static void shuffle(List<?>list):打乱集合中的元素顺序

public static void sort(list list)将集合中的元素按照默认规则排序

public static void sort(List list,Comparator<? super T> c):将集合中的元素按照指定的规则排序

原文地址:https://www.cnblogs.com/lulubenlei/p/14082195.html