集合中的List接口

List接口

Collection将集合划分为两大类:

  1. List集合
  2. Set集合

List接口的特点:

  1. 有序【存储有序】

  2. 可重复

  3. 可以存储 null

  4. 部分子集合线程安全,部分不安全 例如 ArrayListVector

  5. 有索引,针对每个元素能够方便地查询和修改

  6. 判断元素是否重复依赖于equals方法

    ​ a. 如果元素是系统类,不需要重写equals方法

    ​ b. 如果是自定义类,就需要我们按需求重写 equals方法

List接口的常用方法:

增加

void add(int index, E element) 在指定 index 索引处理插入元素 element

boolean addAll(int index, Collection<? extends E> c) 在指定 index 索引处理插入集合元素 c

删除

E remove(int index) 删除指定索引 index 处的元素

修改

E set(int index, E element) 修改指定索引 index 处的元素为 element			

遍历

E get(int index) + int size() for循环遍历集合中的每一个元素

ListIterator<E> listIterator() 通过列表迭代器遍历集合中的每一个元素

ListIterator<E> listIterator(int index) 通过列表迭代器从指定索引处开始正向或者逆向遍历集合中的元素

获取

E get(int index) 获取指定索引处的元素

int indexOf(Object o) 从左往右查找,获取指定元素在集合中的索引,如果元素不存在返回 -1

int lastIndexOf(Object o) 从右往左查找,获取指定元素在集合中的索引,如果元素不存在返回 -1

List<E> subList(int fromIndex, int toIndex) 截取从 fromIndex 开始到 toIndex-1 处的元素

List接口的遍历方式:

  1. toArray

  2. Iterator

  3. foreach

  4. 普通for

  5. ListIterator

List接口去除重复元素:

​ 方式一:创建一个新的集合去除重复元素再使用地址传递

​ 方式二:在原集合的基础上使用选择排序思想去除重复元素

List<String> list = new ArrayList<String>();
		list.add("张三");
		list.add("李四");
		list.add("李四");
		list.add("李四");
		list.add("王五");

for (int i = 0; i < list.size(); i++) {
    for (int j = i + 1; j < list.size(); j++) {
        if (list.get(i).equals(list.get(j))) {
            list.remove(j);
            j--;
        }
    }
}

并发修改异常的处理:

异常名称:并发修改异常 java.util.ConcurrentModificationException

产生原因:在使用迭代器迭代的同时使用原集合对元素做了修改

解决办法:

  1. 使用 toArray 方法

  2. 使用 普通 for 遍历

  3. 使用 ListIterator 遍历集合并且使用 列表迭代器修改元素

ArrayList

特点:

  1. 底层数据结构是数组
  2. 增加和删除的效率低,查询和修改的效率高
  3. 能够存储 null 值
  4. 线程不安全,效率高 可以通过 Collections.synchronizedList();变安全
  5. 有索引,能够方便检索
  6. 元素可重复,我们自己可以通过 选择排序去重复
  7. 不可以排序,但是可以通过 Collections.sort();方法排序

猜你喜欢

转载自blog.csdn.net/Ariqiao/article/details/89644260