zoukankan      html  css  js  c++  java
  • java集合之List

    List 接口实现了 Collection 接口,它主要有两个实现类:ArrayList 类和 LinkedList 类。在 List 集合中允许出现重复元素。与 Set 集合不同的是,在 List 集合中的元素是有序的,可以根据索引位置来检索 List 集合中的元素,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。

    ArrayList 类

    ArrayList 类提供了快速的基于索引的成员访问方式,对尾部成员的增加和删除支持较好。使用 ArrayList 创建的集合,允许对集合中的元素进行快速的随机访问,不过,向 ArrayList 中插入与删除元素的速度相对较慢。该类的常用构造方法有如下两种重载形式。

    • ArrayList():构造一个初始容量为 10 的空列表。
    • ArrayList(Collection<?extends E>c):构造一个包含指定 Collection 的元素的列表,这些元素是按照该 Collection 的迭代器返回它们的顺序排列的。

    List接口的特点:

    1. 有序【存储有序】

    2. 可重复

    3. 可以存储 `null`值

    4. 部分子集合线程安全,部分不安全 例如 `ArrayList` 和 `Vector`

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

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

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

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

    java.util.ArrayList < E > 的一些方法 描述

    • ArrayList() 构造函数,创建一个空的列表, size为0
    • add(o: E): void 在list的末尾添加一个元素o
    • add(index: int, o: E): void 在指定的index处插入元素o
    • clear(): void 从list中删除所有元素
    • contains(o: Object): boolean 如果list含有元素o,返回true
    • get(index: int): E 返回指定index处的元素
    • indexOf(o: Object): int 返回list中第一个匹配元素的index
    • isEmpty(): boolean 如果list不含元素,返回true
    • lastIndexOf(o: Object): int 返回list中最后一个匹配元素的index
    • remove(o: Object): boolean 删除list中的第一个元素o,如果元素被删除,返回true
    • size(): int 返回list中元素个数
    • remove(index: int): boolean 删除指定index处的元素,如果元素被删除,返回true
    • set(index: int, o: E): E 设置指定index处的元素为o

    注意: 使用 subList() 方法截取 List 集合中部分元素时要注意,新的集合中包含起始索引位置的元素,但是不包含结束索引位置的元素。例如,subList(1,4) 方法实际截取的是索引 1 到索引 3 的元素,并组成新的 List 集合。

    List接口去除重复元素:**

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

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

     1 List<String> list = new ArrayList<String>();
     2 list.add("张三");
     3 list.add("李四");
     4 list.add("李四");
     5 list.add("李四");
     6 list.add("王五");
     7 
     8 for (int i = 0; i < list.size(); i++) {
     9 for (int j = i + 1; j < list.size(); j++) {
    10 if (list.get(i).equals(list.get(j))) {
    11 list.remove(j);
    12 j--;
    13 }
    14 }
    15 }

    并发修改异常的处理:

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

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

    解决办法:

    1. 使用 toArray 方法

    2. 使用 普通 for 遍历

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

    LinkList类

    LinkedList 类采用链表结构保存对象,这种结构的优点是便于向集合中插入或者删除元素。需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高,但是 LinkedList 类随机访问元素的速度则相对较慢。这里的随机访问是指检索集合中特定索引位置的元素。

    LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作
    LinkedList 实现 List 接口,能对它进行队列操作
    LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用
    LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
    LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
    LinkedList 是非同步的

    LinkedList 类除了包含 Connection 接口和 List 接口中的所有方法之外,还实现了下列方法。

    void addFirst(E e) 将指定元素添加到此集合的开头
    void addLast(E e) 将指定元素添加到此集合的末尾
    E getFirst() 返回此集合的第一个元素
    E getLast() 返回此集合的最后一个元素
    E removeFirst() 删除此集合中的第一个元素
    E removeLast() 删除此集合中的最后一个元素

     这篇博文讲的特别好,需要详细了解可参考      https://www.cnblogs.com/lintong/p/4374292.html

  • 相关阅读:
    git 的分支体系命令汇总
    git命令行学习思路总结
    angular1.5版本的自我认识
    我最想去的公司啊 -- 幸福面试两小时
    【转】【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
    时间被序列化后的页面显示的问题
    JS组件Bootstrap实现弹出框和提示框效果代码
    Bootstrap组件之导航条
    Bootstrap学习笔记(四)-----Bootstrap每天必学之表单
    Bootstrap学习笔记(三)-----Bootstrap每天必学之表格
  • 原文地址:https://www.cnblogs.com/lqhhome/p/10809756.html
Copyright © 2011-2022 走看看