List:允许我们通过下标访问元素的有序,可重复接口;Set不能通过下标访问元素,不可重复的无序接口
List下有2个子类实现:
ArrayList:动态数组,更适合于随机访问
LinkedList:链表,更适用于增删元素
E get(int index):获取集合中指定下标index对应的元素
E set(int index, E elment):用给定元素elment替换指定位置index元素,并将原位置的元素返回
void add(int index, E elment):就爱那个给定元素elment插入到指定位置index,原位置及之后的元素都顺序向后移动
E remove(int index):删除给定位置index的元素,并将删除的元素返回
List<E> subList(int from, int to):获取给定范围[from,to)的子集。
当我们通过子集修改元素时,会同时改变父集(原集合)中相对应的元素
将List转为数组,有2中方法:
(1)Object[] toArray();
(2)<T> T[] toArray(T[] a);
toArray()是一个集合方法,Set类只是不常用而不是不能用
将数组转为List:
stati<T> List<T> asList<T...a>
返回的List集合元素类型由传入的数组元素类型决定
数组只能转换为List集合,因为若转换为Set,可能丢失重复元素
通过数组转换的集合是不能改变集合元素数量的,修改集合元素会导致数组元素改变
所有的集合实现类都支持一个构造方法,该构造方法可以传入一个Collection,那么该构造方法创建出来的集合默认就添加了给定集合中的所有元素。这样的构造方法叫做复制构造器。
例如:List list1 = new ArrayList(list2);//list1复制了list2中的所有元素
Collections是Collection的工具类
Collections.sort()可以实现集合排序
void sort(List<T> list):对集合元素进行自然排序(从小到大)
当前类的实例如果需要比较大小是,我们需要实现一个接口Comparable,通常该接口指定的泛型类型就是当前类型
该接口用于定义其子类是可以比较的,比较方法为:
int compareTo(T t):用于定义对象间的比较规则(子类对象如需比较,必须重写)
该方法要求返回一个整数,这个整数不关心其具体值,值关注取值范围
当返回值>0时,表示当前对象比参数给定的对象大
当返回值<0时,表示当前对象比参数给定的对象小
当返回值==0时,表示当前对象和参数给定的对象相等
comparator:当自身提供的比较规则不能满足我们对排序的要求时,我们可以提供的一种额外比较规则
如果希望在排序的操作中临时指定比较规则,可以使用comparator接口回调的方法
int compare(T o1,T o2);
若o1>o2,返回值>0
若o1<o2,返回值<0
若o1==o2,返回值=0