Java中Collection Frame中常用集合簡析(ArrayList,Vector,HashSet,TreeSet...)
2005-6-7 星期二 陰晴不定(今年高考的第一天)
在使用Java的時候,我們都會遇到使用集合(Collection)的時候,但是Java API提供了多種集合的實現,我在使用和麵試的時候頻頻遇到這樣的“抉擇” 。 :)(主要還是面試的時候)
久而久之,也就有了一點點的心得體會,寫出來以供大家討論 。
總的說來,Java API中所用的集合類,都是實現了Collection介面,他的一個類繼承結構如下:
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Vector : 基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。效能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector“sychronized”的,這個也是Vector和ArrayList的唯一的區別。
ArrayList:同Vector一樣是一個基於Array上的連結串列,但是不同的是ArrayList不是同步的。所以在效能上要比Vector優越一些,但是當執行到多執行緒環境中時,可需要自己在管理執行緒的同步問題。
LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array效能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的資料(data);2.下一個節點的資訊(nextNode)。所以當對LinkedList做新增,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的資料移動。只要更改nextNode的相關資訊就可以實現了。這就是LinkedList的優勢。
List總結:
1. 所有的List中只能容納單個不同型別的物件組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(連結串列)適合新增,刪除操作。
HashSet:雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的儲存方式是把HashMap中的Key作為Set的對應儲存項。看看HashSet的add(Object obj)方法的實現就可以一目瞭然了。
public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}
這個也是為什麼在Set中不能像在List中一樣有重複的項的根本原因,因為HashMap的key是不能有重複的。
LinkedHashSet:HashSet的一個子類,一個連結串列。
TreeSet:SortedSet的子類,它不同於HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。
Set總結:
1. Set實現的基礎是Map(HashMap);
2. Set中的元素是不能重複的,如果使用add(Object obj)方法新增已經存在的物件,則會覆蓋前面的物件;
終於寫完了,唉,累死我了,終於知道寫東西的痛苦了!!!!!!
相關文章
- Java List 常用集合 ArrayList、LinkedList、VectorJava
- Java Collection介面 ArrayList集合(容器)Java
- Difference Between Arraylist And Vector : Core Java Interview Collection QuestionJavaView
- Java 集合 ArrayList VS LinkedList VS VectorJava
- Java中Vector和ArrayList的區別Java
- 【java】【集合】去除ArrayList中的元素、ArrayList巢狀ArrayListJava巢狀
- java中的List介面(ArrayList、Vector、LinkedList)Java
- 【JavaSE】集合類Collection集合Map集合的簡單介紹,List介面,中三個常用子類ArrayList、Vector、LinkedList之間的比較。Set介面。Java
- Java中Vector與ArrayList的區別詳解Java
- Java集合 HashSet的原理及常用方法Java
- Java Set 常用集合 HashSet、LinkedHashSet、TreeSetJava
- 【Java集合】單列集合Collection常用方法詳解Java
- List集合(ArrayList-LinkedList);Set集合(HashSet-TreeSet)
- Java集合系列-HashSetJava
- Java集合-CollectionJava
- Java學習--java中的集合框架、Collection介面、list介面Java框架
- java arrayList vector 區別Java
- Java集合——ArrayListJava
- JAVA集合-ArrayListJava
- Java 集合之ArrayListJava
- Java集合之ArrayListJava
- 【Java集合】2 ArrayListJava
- Java集合(一) —— ArrayListJava
- Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及區別Java
- Java 集合中的排序演算法淺析Java排序演算法
- Java:Collection集合、泛型Java泛型
- Java Collection集合面試題Java面試題
- ArrayList 和 Vector 的區別 -JAVAJava
- Java結合中的HashSetJava
- 十五個常用的 Laravel 集合(Collection)Laravel
- 15個常用的Laravel 集合(Collection)Laravel
- List集合總結,對比分析ArrayList,Vector,LinkedList
- 【java】【集合】List、ListIterator、VectorJava
- java集合【12】——— ArrayList,LinkedList,Vector的相同點與區別是什麼?Java
- Java集合 Collection、Set、Map、泛型 簡要筆記Java泛型筆記
- Java集合框架(一)-ArrayListJava框架
- Java 集合框架(二)—— ArrayListJava框架
- Java集合原始碼分析(九)——HashSetJava原始碼