集合Collection之List(有序,重复)

一、List集合常见的子类有:


  1、ArrayList:
          底层数据结构是Objetc数组,查询快,增删慢。线程不安全,效率高。

  2、Vector:
          底层数据结构是Objetc数组,查询快,增删慢。线程安全,效率低,因为它给整个方法上面添加了synchronized,太笨重了。

  3、LinkedList:
          底层数据结构是双向链表,查询慢,增删快。线程不安全,效率高。

  4、CopyOnWriteArrayList:
          底层数据结构是Objetc数组,查询快,增删慢。线程安全。

          ● ArrayList的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。

          ● 这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更有效。
            在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。

          ● 允许使用所有元素,包括 null。

          ● 此数组在迭代器的生存期内不会更改,因此不可能发生冲突,并且迭代器保证不会抛出 ConcurrentModificationException。
             【即允许迭代器遍历集合,集合修改元素】

     案例:

        public static void main(String[] args) {
              CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
              list.add("Hello");
              list.add("world");
              list.add("java");

             //允许迭代器遍历集合,集合修改元素
              ListIterator iterator = list.listIterator();
              while (iterator.hasNext()) {
                  String s = (String) iterator.next();
                  if("world".equals(s)) {
                      list.add("PGH");
                  }
                  System.out.print(s + " ");    //Hello world java  迭代器中元素不变
              }
              System.out.println(list);   //[Hello, world, java, PGH]
          }

          ● 创建迭代器以后,迭代器就不会反映列表的添加、移除或者更改。在迭代器上进行的元素更改操作(remove、set 和 add)不受支持。
            这些方法将抛出 UnsupportedOperationException。
             【即不允许迭代器遍历集合,迭代器修改元素】

     案例:

        public static void main(String[] args) {
              CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
              list.add("Hello");
              list.add("world");
              list.add("java");

             //不允许迭代器遍历集合,迭代器修改元素,报错UnsupportedOperationException
              ListIterator iterator = list.listIterator();
              while (iterator.hasNext()) {
                  String s = (String) iterator.next();
                  if("world".equals(s)) {
                      iterator.add("PGH");
                  }
              }
              System.out.println(list);   //java.lang.UnsupportedOperationException
          }
        
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 集合框架体系概述 为什么出现集合类?方便多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方法. 数组...
    acc8226阅读 804评论 0 1
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,980评论 0 13
  • 一:基本概念 Java的所有集合都放在java.util包下,集合跟数组不同之处在于前者只能保存对象(对象的引...
    Febers阅读 453评论 0 0
  • 一、集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map;两者的区别: 1、Col...
    程序员欧阳阅读 11,650评论 2 61
  • 我发现我还是比较喜欢爱你的那个自己 我发现我喜欢你的时候比较快乐
    Honey小飞侠阅读 135评论 0 1