1. 程式人生 > >2017/12/28-1集合和多線程

2017/12/28-1集合和多線程

索引 同時存在 tree 方式 元素 自定義 重點 tostring 註意

1、---|Collection: 單列集合
---|List: 有存儲順序, 可重復
---|ArrayList: 數組實現, 查找快, 增刪慢
由於是數組實現, 在增和刪的時候會牽扯到數組
增容, 以及拷貝元素. 所以慢。數組是可以直接
按索引查找, 所以查找時較快
---|LinkedList: 鏈表實現, 增刪快, 查找慢
由於鏈表實現, 增加時只要讓前一個元素記住自
己就可以, 刪除時讓前一個元素記住後一個元
素, 後一個元素記住前一個元素. 這樣的增刪效
率較高但查詢時需要一個一個的遍歷, 所以效率較低

---|Vector: 和ArrayList原理相同, 但線程安全, 效率略低
和ArrayList實現方式相同, 但考慮了線程安全問
題, 所以效率略低
---| Set接口 無序,不可以重復的集合
---|HashSet 線程不安全,存取速度快。底層是以hash表實現的。

---|TreeSet 紅-黑樹的數據結構,默認對元素進行自然排序(String)。
如果在比較的時候兩個對象返回值為0,那麽元素重復。
2、 ---| Map 接口 將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。

---| HashMap 采用哈希表實現,所以無序

---| TreeMap 可以對健進行排序

---|Hashtable:底層是哈希表數據結構,線程是同步的,不可以存入null鍵,null值。效率較低,被HashMap 替代。

---|HashMap:底層是哈希表數據結構,線程是不同步的,可以存入null鍵,null值。要保證鍵的唯一性,需要覆蓋hashCode方法,
和equals方法。

---|LinkedHashMap:該子類基於哈希表又融入了鏈表。可以Map集合進行增刪提高效率。

---|TreeMap:底層是二叉樹數據結構。可以對map集合中的鍵進行排序。需要使用Comparable或者Comparator 進行比較排序。
return 0,來判斷鍵的唯一性。

3、如果調用remove之前沒有調用next是不合法的,會拋出IllegalStateException;

4、註意同時重寫equals方法和hashcode方法,要想使用toString方法直接顯示集合,要註意重寫;

5、----| Comparable
compareTo(Object o) 元素自身具備比較性
----| Comparator
compare( Object o1, Object o2 ) 給容器傳入比較器

TreeSet集合排序的兩種方式:一,讓元素自身具備比較性。也就是元素需要實現Comparable接口,覆蓋compareTo 方法。這種方式也作為元素的自然排序
,也可稱為默認排序。
二,讓容器自身具備比較性,自定義比較器。需求:當元素自身不具備比較性,或者元素自身具備的比較性不是所需的。
那麽這時只能讓容器自身具備。
定義一個類實現Comparator 接口,覆蓋compare方法。並將該接口的子類對象作為參數傳遞給TreeSet集合的構造函數。
當Comparable比較方式,及Comparator比較方式同時存在,以Comparator比較方式為主。
6、遍歷Map的方式:
將map 集合中所有的鍵取出存入set集合。
Set<K> keySet() 返回所有的key對象的Set集合
再通過get方法獲取鍵對應的值。
values() ,獲取所有的值.
Collection<V> values()不能獲取到key對象

Map.Entry對象 推薦使用 重點 Set<Map.Entry<k,v>> entrySet()將map 集合中的鍵值映射關系打包成一個對象Map.
Entry對象通過Map.Entry 對象的getKey,getValue獲取其鍵和值。
7、一個任務一個進程,一個進程可以有多個線程;
8、同步是一種機制,防止訪問同一個資源時,造成死鎖或結果不正確;可以創建同步方法,也可以用同步代碼塊;
9、多線程的實現方式:一、繼承Thread類,重寫run(),使用時調用start();
二、實現Runable接口,重寫run();使用時把他的實現類的引用傳給Thread的構造方法作為參數;

2017/12/28-1集合和多線程