在java集合思考中介绍了JCF框架,那么JCF框架的常用类有哪些呢?

 

List接口:

一:ArrayList

private static final int DEFAULT_CAPACITY = 10; 
 
 
 
    private static final Object[] EMPTY_ELEMENTDATA = {}; 
 
 
    private transient Object[] elementData; 
 
 
    private int size;

 Object[]来管理元素,等于数组的加强版,在add()方法时先调用ensureCapacityInternal()方法来扩展容量。

二:LinkedList:

LinkedList<E>      extends AbstractSequentialList<E>  implements List<E>, Deque<E>, Cloneable

实现了Deque,Cloneable接口:说明可以复制和具有队列的功能

继承了AbstractSequentialList抽象类,而AbstractSequentialList继承了abstactlist抽象类

transient int size = 0; 
 
 
 
    transient Node<E> first;
 
 
    transient Node<E> last;

具有两个属性: first,last,表示第一位和最后一位。

采用Node来表示表示每个元素。

Node是个内部静态类

private static class Node<E> { 
 
 
 

           E item; 
 
 
 

           Node<E> next; 
 
 
 

           Node<E> prev; 
 
 
 

           Node(Node<E> prev, E element, Node<E> next) { 
 
 
 

               this.item = element; 
 
 
 

               this.next = next; 
 
 
 

               this.prev = prev; 
 
 
 

           } 
 
 
 

       }

inkedList类是双向列表.

操作:

private void linkFirst(E e)
 
 
private linkLast(E e)

特点:通过链表可以实现快速的插入,但是获取元素比较慢

而Arraylist.get()比较快,set()比较慢

 

Set接口:

1:特点:

A collection that contains no duplicate elements.  More formally, sets   contain no pair of elements e1 and e2such that 

 e1.equals(e2), and at most one null element..

也就是说我们可以用Set接口来存储非空的,不重复发到元素。

常用的类:HashSet和TreeSet

1:HashSet:无序集合,支持null值,采用Hash算法存放元素。

HashSet<E>     extends AbstractSet<E> implements Set<E>, Cloneable 
 
 
 
 private transient HashMap<E,Object> map:

特点:

1:采用HashMap的key来存储集合

2:非线程安全:为了提高效率没有使用synchronized,所以如果多线程操作一个HashSet的话,则必须使用外部锁。

3:获取元素要通过iterator()返回一个迭代器,因此具有fail-fast特性:fail-fast是指在对集合进行迭代的时候,如果某个线程对集合进行了修改,那么这个时候就产生了fail-fast错误。

 

TreeSet类:是一个有序集合,不支持null值,采用二叉树实现排序

TreeSet<E> extends AbstractSet<E>   
  implements NavigableSet<E>, Cloneable, java.io.Serializable
 
 
    private transient NavigableMap<E,Object> m; 
 
 
  
     private static final Object PRESENT = new Object();

继承了 NavigableSet接口,采用NavigableMap来存储元素,其实就是TreeMap来存储元素,如果你对Treemap比较了解的话,对TreeSet也就没问题的

特性:

1:采用TreeMap的key来存放元素,

1:支持排序:final Comparator<? super K> comparator,有个Comparator排序实例,在put()的时候,会先调用compare()

2:非线程安全的,需要通过外部锁来保证线程安全。

总结:1:ArrayList适合于快速读取,修改操作比较少的集合。2:LinkedList适合于修改操作比较多,读取比较少的集合。3:HashSet适合于存储非空,不重复的无序集合元素,效率比较高。4:TreeSet适合于存储非空,不重复的有序集合元素,效率比HashSet低。

参考资料:

http://www.importnew.com/6931.html

http://www.ibm.com/developerworks/cn/java/j-tiger06164/

http://www.importnew.com/6931.html