java容器:java
容器,顧名思義,就是用來存放東西的道具,可是在咱們程序開發中容器的概念就是用來存在咱們數據對象的引用。
數組
往常的數組存儲,因爲數組開始的長度已經指定,開發過程當中不能隨意修改,致使了後續的麻煩,並且在存放的類型還必須是相同的類型,所以java API給開發者提供了java 容器,java內的容器類都是繼承了Collection接口,再次在進行擴展。
安全
java內的容器主要有List, Set,Map三種框架
1:List 繼承了Collection接口,他的主要實現類主要有ArrayList和LinkedList,Vector,其中ArrayList是順序結構動態數組表,LinkedList是鏈表,Vector是向量,Stack實現了Vector,Vector和Stack如今不常常用。下面簡要看一下ArrayList和LinkedList異步
ArrayList:容許null元素,讀取速度比較快,可是修改起來比較麻煩,須要將數組總體後移,他的存儲空間是連續的spa
LinkedList:讀取速度比ArrayList慢,可是修改起來容易,若果刪除或者新增只須要修改指針的指向就行,他的存儲空間是不連續的。線程
Vector:是線程安全的。用的比較少了指針
2:set繼承了Collection接口,他的主要實現類HashSet,set是數學中定義的集合,因此set中的數據沒有順序並且不容許重複,HashSet中存放的是隻是對象的值。orm
2:Map沒有繼承collection接口,它提供了Key-value的鍵值對映射,不容許key值有重複,若是有重複那麼他會覆蓋。他的主要實現類爲HashMap和HashTable,TreeMap,LinkedHashMap,WeakHashMap,IdentifyHashMap,咱們日常用的比較多的就是HashMap和Hashtable,二者比起來,HashMap是異步的,他提供的鍵值對的映射,容許null,HashTable是線程安全的,但不容許插入null,對象
注意一點就是HashMap和HashSet,HashTable的區別:
HashMap:實現了map接口,因爲他是異步的,因此線程不是安全的,若是須要實現線程安全須要用Collection框架下其餘路徑進行實現,他存放的是鍵值對,容許爲空的值(key和value)均可以,他是用來取代Hashtable的,他計算哈希值是經過鍵值對來計算,此外他的訪問速度比較快,由於他經過一個惟一的key來檢索對象,他用put進行添加元素;hashmap採用HashMap.entrySet().iterator()方法進行遍歷
HashSet:實現了set接口,存放的對象指,不容許空的對象,他計算哈希值是經過成員對象來計算哈希值,此外他的訪問速度比HashMap慢,他用add進行元素的添加;
HashTable:他實現了map接口,可是他是線程安全的,他不容許插入null值,Hashtable遍歷使用Enumeration()進行遍歷,
可是java程序中對set用的比較少,此外HashMap是在jdk5版本以上用來替代Hashtable的,HashMap的線程安全採用Collections.synchronizedMap(hashmap)的方法。
咱們日常用的多的是HashMap,ArrayList,LinkedList比較多,Vector和Stack以及set,Hashtable用的比較少,
HashMap,ArrayList,LinkedList三個都不是線程安全的。