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

2018-06-11  本文已影响0人  紫雨杰

一、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
          }
        
上一篇 下一篇

猜你喜欢

热点阅读