今日学习内容总结如下:
List接口
有序 允许重复
public interface List<E> extends Collection<E>
继承自Collection接口的方法
- boolean add(E e);向集合末尾追加元素e对象
- boolean remove(Object obj)删除第一个和obj相等的元素,如果没有和obj相等元素,则报异常IndexOutOfBoundsException
List接口中的特殊方法
- void add(int index, E element); 向指定索引位置index上添加元素element,原始数据自动后移
- E get(int index); 获取指定索引号对应的元素,index应该在[0,size-1]
- E set(int index, E element); 用于给指定索引位置上进行赋值,这个位置上必须有对应的数据(已经赋过值),这里实际上是修改操作,否则IndexOutOfBoundsException
- E remove(int index);删除指定位置的元素,可以返回原始位置上存储的元素
- int indexOf(Object o); 查找从左向右第一个o元素的下标索引,如果元素不存在返回-1
- int lastIndexOf(Object o);从右向左查找
对象相等判定使用的是equals方法
sort方法按照自定义比较器对集合中的所有元素进行排序,默认自然序
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray(); //将List集合对象转换为数组
Arrays.sort(a, (Comparator) c); //调用Arrays工具类中的排序方法对数组进行排序
ListIterator<E> i = this.listIterator(); //获取List集合对象中特殊的Iterator迭代器对象
for (Object e : a) { //foreach结构遍历数组中的所有元素
i.next();
i.set((E) e); //修改集合List中迭代器指定的当前位置上的元素
}
}
list.sort(new Comparator<A2>() {
public int compare(A2 o1, A2 o2) {
// 自定义比较规则,按照id从小到大,如果id相等则按照name从大到小
int res = o