List:列表
此接口对应的实现类的特点都是:有序的、可重复的(重复与否与元素的equals()方法有关)
常用方法:
void add(int index, E element) 将元素element插入此集合的index处
E get(index) 返回指定下标的元素
E set(int index, E element) 替换指定下标的元素
int indexOf(obj) 返回obj第一次出现的下标,没有出现返回-1
boolean remove(int index) 移除此集合中下标为index的元素
List<E> subList(int fromIndex,int endIndex) 截取此集合中的一部分,从fromIndex开始到en
dIndex 包前不包后
ps:此方法在堆中产生了一个内部类SubList集合对象,此集合对象指向引用的是父集的一部分,修改子集,会影响父集
int lastIndexOf(Object obj) 返回此集合中指定元素obj最后一次出现的下标,找不到则返回-1
数组与集合之间的转换:
1、集合转数组
Object toArray()
E[] toArray(E[] e)
2、数组转集合
List Arrays.asList(数组参数)
ps:数组转成的集合不能进行增删操作,否则会出现运行时异常java.lang.UnsupportedOperationException
可以修改,会影响数组内容。可以将元素存入新的数组中进行增删操
List的三个实现类:
(1)ArrayList:底层是基于动态数组的数据结构,是有存放顺序的
(2)LinkedList:底层是基于双链表的数据结构,每一个存储单元都涉及到其他两个引用
优缺点:执行get()/set()方法时,ArrayList的效率高,LinkedList的效率低
在增加/删除操作时,LinkedList效率高,ArrayList效率低
(3)Vector:是一个比较古老的集合,线程安全,效率特别低,不建议使用
List排序:
Comparable接口:
在定义元素类型时实现Comparable接口,实现接口内的compareTo(E e),实现对象之间可以进行比较
方法:
int compareTo(E e)
比较规则:
(1)this与e比较,this-e如果大于0,返回一个大于0的数,按照升序排序
如果等于0,返回0
如果小于0,返回一个小于0的数
(2)e-this,降序排序
工具类Collections:
sort(Collection c) 对集合里的元素进行排序
Comparator比较器接口:
当元素类型已经实现了Comparable接口,定义了默认比较规则,想要换其他比较规则,可以利用比较器接口来重新定义比较规则
方法:
int compare(E o1,E o2)
比较规则:
(1)o1与o2比较,o1-o2如果大于0,返回一个大于0的数,按照升序排序
如果等于0,返回0
如果小于0,返回一个小于0的数
(2)o2-o1降序排序