java.util.Collections是集合工具类,用来对集合进行操作
常用的方法有
1.打乱集合顺序
public static <T> boolean addAll(Collection<T> c,T...elements) 往集合中添加一些元素 public static void shuffle(List<?> list)
2.将集合中元素按照某种默认规则排序
public static <T> void sort(List<?> list)
3.将集合中元素按照指定规则排序
public static <T> void sort(List<?> list,Comparator<? super T>)
List接口介绍
java.util.List 接口继承自Collection接口,是单列集合的一个重要分支,我们习惯性的会将实现了List接口的对象称为List集合,实现了Set接口的对象称为Set集合。在List集合中允许出现重复元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引访问集合中指定的元素。另外,List集合还有一个特点,元素有序,即元素的存入顺序和取出顺序一致。
List接口特点
1.它是一个元素存取有序的集合,例如,存元素的顺序是11,22,33,那么集合中,元素的存储顺序就是11,22,33
2.它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素,与数组的索引是一个道理
3.集合中可以有重复元素,通过元素的equals方法,来比较是否为重复元素。
List接口中常用的方法(带索引)
public void add(int index,E element) 将指定的元素,添加到集合的指定位置上
public E get(int index) 返回集合中指定位置的元素
public E remove(int index) 移除列表中指定的位置的元素,并返回,返回的是被移除的元素
public E set(int index,E element) 用指定元素替换集合中指定位置的元素,返回值为更新前的元素
注意:
1.操作索引的时候,一定要防止索引越界异常
2.IndexOutOfBoundsException 索引越界异常 集合会报
3.ArrayIndexOutBoundsException 数组索引越界异常
4.StringIndexOutOfBoundsException 字符串索引越界异常
List的子类 --- arrayList集合
java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素,此集合提供一些方法操作内部存储的元素。该集合中可以不断的添加元素,数组的长度也会自动变更。
1.常用方法
public boolean add(E e) 将指定的元素添加到此集合的尾部
public E remove(int index) 移除此集合中指定位置上的元素,返回被删除的元素
public int size() 返回此集合中的元素个数,遍历集合的时候,可以控制索引的范围
List的子类 --- LinkedList
Java.util.LinkedList 集合存储数据的结构是链表结构,方便元素的添加、删除,它是一个双向链表。
LinkedList提供了对集合首尾元素添加和删除操作的方法,如下:
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 isEmpyt() 如果集合不包含元素,则返回true
set接口
java.util.Set 接口和List接口一样,同样继承自Collection接口,它与collection接口中的方法基本一致,并没有对collection接口进行功能上的拓展,只是比collection接口更加严格了,与List不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
Set接口特点:
不允许存储重复元素
没有索引,没有带索引的方法,也不能使用普通for循环,可以采用增强for,或者是迭代器。
HashSet
java.util.HashSet 是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的,即存取顺序不一致。java.util.HashSet的底层实现其实是一个java.util.HashMap.
HashSet特点:
1.不允许存储重复元素
2.没有索引,没有带索引的方法,也不能使用普通for循环,可以采用增强for,或者是迭代器。
3.是一个无序的集合,存储元素和取出元素的顺序有可能不一致
4.底层是一个哈希表结构(查询的速度非常快)
注意:
hashSet是根据对象的哈希值来确定在集合中的存储位置,因此具有良好的存取和查找性能,保证元素唯一的方式依赖于equals和hashCode方法。
hashCode
哈希值:是一个十进制的整数,由系统随机给出,就是对象的地址值,是一个逻辑地址,是模拟出来得到的地址,不是数据的实际存储的物理地址。
在object类中有一个方法,可以获取对象的哈希值, int hashCode() 返回该对象的哈希码值
hashCode方法 public native int hashCode() native 代表方法调用的是本地操作系统的方法
HashSet存储自定义类型元素
给hashSet中存放自定义元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证hashSet集合中的对象唯一。
LinkedHashSet
在hashSet下面有一个子类 linkedHashSet,它是链表和哈希表组合的一个数据存储结构
特点:底层是一个哈希表+链表,多了一个链表(记录元素的存取顺序)保证元素有序