集合框架

 
框架:爲了實現某一種特定功能而預先設計好的,一系列具備繼承或實現關係的類與接口,操做時能夠直接從高層進行開發而沒必要關注底層的實現。
 
java集合框架簡稱爲:JCF
J:java
C:collections
F:frame
 
 
一、集合:Collection整個集合框架的核心接口(集合根接口):直接衍生List,Set,間接衍生Map(組合Collection)
二、工具類:Collections Arrays
三、比較器:Comparable Comparator
 
目標:增刪查改,以及遍歷(關鍵)
List:列表
特色:線性--以有序的方式存放數據(鏈表就是),最大
特色(有下標);
掌握:ArrayList、LinkedList
方法:
---.add();
---.size();
---.remove("下標/具體某元素(只會刪除以一個)");
---.get();查詢----默認返回的是Object,因此須要強轉
---.set();根據下標改
遍歷:
---普通for循環
---for-each循環(JDK1.5之後的功能,就用迭代器)
for(Object obj : obj){
 
---迭代器(JDK1.5之後不多用)(可能維護老代碼,可能會用到)
---之前專用與沒有下標的集合類完成遍歷,如今被for-each替代
---能夠理解爲零時的盒子,理解爲將lis中的數據所有放進去,
---Iterator it = lis.interator();
---it.hasNext();//判斷有沒有下一個,有true
---it.next();//取
區別掌握:
一、ArrayList採用的是數組的方式進行存儲
二、Linkedlist採用的是鏈表的方式進行儲存:並且是雙向鏈表
這種區別形成了使用場景的差別:查詢(ArrayList快)快增刪(中間Linkedlist快)(末尾ArrayList快)
一、ArrayList: 適用於作大量的查詢工做,或往尾部增長和刪除數據
二、Linkedlist: 適用於作大量的往中間添加和刪除數據
辨析:ArrayList、LinkedList、Vector
一、Vector也是List的分支,是ArrayList的兄弟類,底層實現也是數組
二、不一樣:Vector是線程安全的(線程同步),效率低
LinkedList:實現接口
一、queue:隊列
---一般(但並不是必定)以 FIFO( 先進先出)的方式排序各個元素
方法:
---offer(E e); 指定元素插入 隊尾(爲何不用add();當達到容器裝滿以後會拋異常)
---peek(); 獲取 隊頭元素,不移除;隊列爲空返回null
---poll(); 獲取 隊頭元素,而且移除;隊列爲空返回null
---remove(); 同上poll();可是爲null時會拋異常
---element(); 獲取但不移除對頭,null拋異常
二、qeque:
Set:
特色:集--,不能存放重複元素,非線性,即無序,沒有下標(是按照哈希值順序放的)
掌握:HashSet
---一、提供了增長刪除的行爲(只能按照對象刪除)
---二、沒有修改指定和查詢的行爲(由於沒有下標)
---三、不解釋普通for循環
方法:
---.add();//增(不能放重複元素 )
---.size();//獲取長度
---.remove( Object);//沒有下標因此只能根據對象進行刪除
---沒有改的方法
---沒有查詢獲取某個指定元素的方法
遍歷:
---for-each
---迭代器
判斷:Set集合如何判斷兩個元素重複
---不是判斷兩個元素是不是同一對象
---而是: 先調用兩個對象的hashcode方法,判斷是否返回同一個值;
而後調用,equals方法判斷是否放回true;
因此根據規範, 重寫equals同時也要重寫hashcode方法
Map:映射
特色:key-value(鍵值對):無序,key不重複,value能夠重複,無下標;
掌握:hashMap
補充掌握:Properties操做文件的方法
辨析:
HashMap、Hashtable
一、兩個都是Map分支的實現類,擁有相同的API
二、不一樣:
---HashMap是線程不安全的,線程不一樣步,效率高;
---Hashtable是線程安全的,同步的,效率低;
---HashMap能夠用空作鍵 key=null,也可用空來作值value=null;Hashtable不容許;
 
HashMap: ---HashMap<String, Student> map = new HsahMap<String, Student>();
方法:
---.put(key, value); 改,若是key不存在,則增長-必須保證鍵不同;
---.remove(key, value); 刪除,key不存在只會失敗,不會異常,返回刪除的value
---.size();獲取元素 個數
---.get(key);獲取( 查),若是沒有(null)
遍歷:
--- 不能直接遍歷Map,只能單獨遍歷因此的鍵或者全部的
---在遍歷以前 先獲取全部的鍵值(key)和全部的值(value);
---鍵值(key): Set<E> keys = map.keySet();
---值(value) Collection<E> value = map.value();
---而後用for-each或者迭代器遍歷;
 
如何遍歷鍵值對:
Set<Entry<String, Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println(entry);
}
泛型:
框架的類在默認狀況下是能夠操做任意數據類型的 (Object),這原本是集合要解決的數組三大問題之一。可是在實際場景中,咱們每每是把同一數據類型放在一塊兒作同一處理。
 
做用:
---用來 限制某個集合對象只能存放某種類型的元素。
 
 
Collections:集合工具類
方法:
---Collections.min(list);最小
---Collections.max(list);最大
---Collections. sort(list);排序,天然排序(及元素類型自帶的內部比較規則)(默認內部比較器Comparator
---Collections.sort(list, Co);//調用外部比較器
---Collections.shuffle(lst);// 混排---隨機順序
 
Comparable<E>
內部比較器:寫在元素類型的身上
重寫compareTo
---噹噹前對象根據排序對象所決定的位置 小於 指定對象根據規則所決定的位置 ,返回-1
---噹噹前對象根據排序對象所決定的位置 大於 指定對象根據規則所決定的位置 ,返回1
---噹噹前對象根據排序對象所決定的位置 等於 指定對象根據規則所決定的位置 ,返回0
 
Comparator
定義一個實現Comparator<E>的類
---寫一個比較方法
排序調用Collections.sort(List對象,外部比較器);
當傳入外部比較器進行排序時,就是List中的元素有內部的比較器,也之外部爲準;
---第一個對象根據排序對象所決定的位置 小於 第二個對象根據規則所決定的位置 ,返回-1
---第一個對象根據排序對象所決定的位置 大於 第二個對象根據規則所決定的位置 ,返回1
---第一個對象根據排序對象所決定的位置 等於 第二個對象根據規則所決定的位置 ,返回0
 
如何區別使用:
---把最經常使用的排序寫到內部(天然排序)
---較少使用的寫到外部比較器中
相關文章
相關標籤/搜索