1.List體系的實現類具備相同的特色 --> 有序-可重複-有索引-根據索引操做的方法
ArrayList
底層實現結構: 數組結構實現
優勢:經過索引遍歷,隨機獲取效率高
缺點:增長,刪除效率低(遇到數組的拷貝問題)
擴容: int newCapacity = oldCapacity + (oldCapacity >> 1);使用copyOf方法進行動態擴容,每次擴容原容量的1.5倍
默認容量爲10-->add
Vector
與ArrayList底層實現和特色相同
不一樣:a.線程是安全的,ArrayList線程不安全 b.擴容是原容量的2倍
LinkedList
底層實現結構:雙向鏈表實現
優勢:插入數據,刪除數據效率高
缺點:作查詢效率低
若是大量的作刪除能夠使用LinkedList,大量作查詢能夠使用ArrayList
新增方法:一些操做於頭尾的方法(推薦使用見名知意的方法)
注意:List集合存儲對象類型數據 -->重寫equals()方法,默認調用對象的equals()比較java
2.Set 無序不可重複的 自動實現去重
HashSet:是由HashMap的key維護
底層實現:哈希表(數組+鏈表+紅黑樹)|HashTable實現
特色:查詢,增長,修改效率高
缺點:無序,沒有索引操做
擴容:默認初始量是 16,加載因子是 0.75,當數據個數達到初始容量*加載因子個數的時候就擴容,擴容原容量的2倍
存儲基本數據類型|java提供的引用數據類型自動去重
存儲 *對象* 類型數據:去重問題
重寫hashcode()方法和equals()方法編程
若是hashcode相同,對象可能相同可能不一樣
若是hashcode值不一樣,對象確定不相同
hash表結構存儲的流程:
a.計算hashcode值決定桶的位置,若是hashcode值不相同不在一個桶值,根本不會調用equals比較兩個對象內容是否相同了
3.TreeSet
底層:紅黑樹實現
特色:默認升序排序
存儲的數據是自定義引用數據類型
1.去重
2.排序
解決方式
1.Comparable 定義內部比較器 默認
2.comparator 外部比較器數組
4.Map 都是存儲 鍵值對形式的數據 K-V
k都是無序不可重複的 --->Set集合
v是無序,可重複的 --->Collection集合
一個key只能對應一個value,key與value之間具備映射關係
一個key對應多個值,能夠把多個值存儲在容器或者數組中
key和value均可覺得任意數據類型,引用數據類型
相同的key,value會覆蓋安全
5.容器類:ArrayList HashMap最重要
HashMap:線程不安全
底層由hash表實現
HashTable:線程安全的
hash表結構---根據key作去重,key是存儲自定義的對象類型的數據,去重:重寫hashCode和equals方法併發
TreeMap 紅黑樹的結構,內部數據根據key排序,默認升序
自定義規則排序,內部|外部比較器工具
6.Collections 操做容器的工具類
問題:HashMap是線程不安全的
1.使用線程安全的HashTable
2.使用Collections的synchronizedMap(Map<K,V>) m返回線程安全的map
3.java.util.concurrent(高級併發編程包)下 類 ConcurrentHashMap<K,V>實現線程安全的hashmap---效率高
7.Properties 存儲字符串類型的鍵值對
硬編碼:頻繁修改源代碼
使用配置文件概念,把常常修改的數據值,提取出來定義在配置文件中,修改只須要區配置文件中修改就能夠編碼