collections工具类

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,它是链表和哈希表组合的一个数据存储结构

特点:底层是一个哈希表+链表,多了一个链表(记录元素的存取顺序)保证元素有序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值