zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/pan2011/p/3650046.html
Copyright © 2011-2022 走看看