為什麼會出現集合類?
面向對象語言對事物的體現就是以對象的形式
所以為了方便對多個對象的操作
就要對對象進行存儲
集合就是存儲對象的最常用的一種方式
數組和集合為什麼不同?
數組雖然也可以存儲對象
但長度是固定的
集合的長度是可以變的
數組中可以存儲基本數據類型
但集合只能存儲對象
List
List 特點是存入對象是有序的
即存入什麼順序
取出來就會是什麼順序
而且裡面的元素是可以重復的
List按照其底層數據存儲形式可以分為ArrayList和LinkedList
前者是以級數為存儲方式後者以鏈表為存儲方式
顯示前者適合檢索遍歷
後者適合增加刪除
Set
Set的特點是不包含重復元素
而且是無序的
HashSet是底層使用哈稀表為存儲方式實現的Set集合
HashSet給存入的每個對象計算出一個Hash值
然後映射出一個存儲地址
這樣很容易判斷出某個對象是否已經存在
試想如果用ArrayList保證對象重復會有多麼麻煩
假如集合中有
萬個對象
當添加
個對象時
需要進行
次比較才能最後確定這個對象是否已經存在
如果存在
就不加入
如果不存在就添加進去
由此可見HashSet在這方面的優越性
當我們的對象需要存儲到HashSet中時
通常我們需要重寫hashCode方法和equals方法
以我自己的規則判斷兩個對象是否相等
比如
在某種特定的情況下
我們可以設定姓名和年齡都相等的兩個人就是同一個人
HashSet是非線程同步的!
TreeSet 該集合可以對Set集合中的元素進行排序
底層是使用二叉樹作為數據結構
排序性能比較高!
排序的兩種實現方式
元素需要實現Comparable接口
覆蓋compareTo方法
這種方式也稱為元素的自然順序
或默認順序
讓集合具備排序能力
在創建集合的時候傳入一個自定義比較器
自定義比較器要實現Comparator接口
這樣就使得添加元素時集合都會按照比較器裡的要求將每次添加進的元素放到適當的位置
也就是實現的排序
Map
Map是一種與Collection不同的集合
是以key/value的形式存在的
通過key找到對應的value
key就像身份證號一樣需要唯一確定
HashTable 底層是Hash表數據結構
不可以存入null作為鍵和null作為值的情況
Hashtable是線程同步的
jdk
開始效率低
HashMap 底導是hash表數據結構
並允許使用null作為鍵和null作為值
不是線程同步的
jdk
開始 效率高
TreeMap 底層是二叉樹作為數據結構
線程不同步
可以用於map集合中的按鍵排序
Set和Map很像
其實Set底層使用了Map集合
Map集合的取出原理
將map集合取出原理
將map集合轉成Set集合
再通過迭代器取出
記住keySet和EntrySet方法的使用!
Map的應用
利用Properties類讀取配置文件(框架中經常用到)
InputStream in = ReflectCollections
class
getResourceAsStream(
config
properties
)
Properties prop = new Properties()
prop
load(in)
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25821.html