• Java util 包 的层次结构


    Java util 工具包 包含集合框架、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈stack类、向量Vector 类等)。

    一、Collection 和Collections

    Collection是最基本的集合接口。JDK 不提供此接口的任何直接 实现。

    由Collection接口派生的两个接口是List和Set。

    Collection
    ├List
    │├LinkedList
    │├ArrayList
    │└Vector
    │ └Stack
    └Set

      ├HashSet
            ├LinkedHashSet

       ├TreeSet
    Map
    ├Hashtable
    ├HashMap
    └WeakHashMap

    List接口

    List 是有序的collection,类似于数组,可以通过索引访问list的元素。List除了有iterator()方法外,

    还有一个listIterator() 方法,ListIterator多了一些add()之类的方法,还能向前或向后遍历。List允许有相同的元素。

    List<String> list = new ArrayList<String>();         list.add("A");         list.add("B");         list.add("C");         ListIterator<String> listIterator = list.listIterator();         while (listIterator.hasNext()) {             System.out.println(" 从前往后: " + listIterator.next());         }         while (listIterator.hasPrevious()) {             System.out.println(" 从后往前: :" +listIterator.previous());         }

    注意:由后向前输出时必须先由前向后输出。因为 hasPrevious()方法实现中有一个游标 cursor会判断是否有元素。

    在使用 ListIterator接口进行双向输出时,如果想完成从后往前的输出,则一定要先进行从前往后的输出。

    实现List 接口的常用类有LinkedList, ArrayList, Vector和 Stack。

     

    LinkedList类

    LinkedList允许null元素,意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。

    一种解决方法是在创建List时构造一个同步的List:
          List list = Collections.synchronizedList(new LinkedList(...));

     

    ArrayList类

            ArrayList类实现了可变大小的数组,它继承了AbstractList 并且实现了List 接口。在我们能确定它的容量的时候,

       初始化时我们需要给出一个初始值,这样当容量不够时它不用重新在分配容量。可以提高性能。

       和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

     

    Vector类

    Vector 类似于ArrayList ,但是Vector是同步的。当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态

    (例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕 获该异常。

     

    Stack类

    Stack 继承了Vector,所有它也是同步的,它其实是一个后进先出的堆栈,有基本的push、peek和pop方法。

    小结:

    (1)对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。

    (2)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

    (3)Vector是基于Synchronized实现的线程安全的ArrayList。即Vector是线程安全的。

           ArrayList适用于单线程,Vector适用于多线程。

    List<String> list = new LinkedList<String>();         List<String> arrList = new ArrayList<String>();         long startTime = new Date().getTime();         for (int i = 0; i < 200000; i++) {             list.add("AAA"+i);         }         long endTime = new Date().getTime();         System.out.println("LinkedList 花费:" + (endTime - startTime));         long startTimearr = new Date().getTime();         for (int i = 0; i < 200000; i++) {             arrList.add("AAA"+i);         }         long endTimearr = new Date().getTime();         System.out.println("ArrayList 花费:" + (endTimearr - startTimearr));
                 LinkedList 花费: 195
                 ArrayList 花费: 249
  • 相关阅读:
    【iOS开发-从网络上获取图片尺寸】
    【iOS开发之静态库、动态库】
    【iOS开发之OC和JS互调】
    【iOS之runtime、runloop】
    【iOS开发之C语言】sprintf,strncpy,strcmp三个函数的区别
    计算机中的存储单位
    linux命令行
    python的安装
    Java的跨平台特性
    方法的重写(override)两同两小一大原则:
  • 原文地址:https://www.cnblogs.com/pan2011/p/3650046.html
Copyright © 2020-2023  润新知