1. collectiton:單列儲存集合
|--- list 元素是有序的,元素可以重複。因為該集合體系有索引
|--- arraylist: 底層的資料結構使用的是陣列結構
特點:陣列元素查詢很快,但是增刪很慢,因為增刪乙個元素,陣列後面的其他元素都需要變動,執行緒不同步
|--- linklist: 底層的資料結構使用的是鍊錶資料結構
特點:鍊錶查詢比較慢,反正與 資料結構 相反
|--- vector: 底層是陣列資料結構
特點:其他與 arraylist 相同,但是 執行緒同步,被前者替代了
|--- set 元素是無序的(存入和取出的順序不一定一致),元素不可以重複
|--- treeset: 可以對 set 集合中的元素排序,底層資料結構是二叉樹。 保證元素的唯一性的一句 compareto 方法 return 0
treeset 排序的第一種方式:讓元素自身具備比較性,元素需要實現 comparable 介面實現 compareto 方法。這種方式也成為元素的順序。也即是預設順
序treeset 排序的第二種方式:當元素不具備比較性時,或者具備的比較性不符合要求。這就要求集合自身具備比較性
在集合初始化時,就讓其擁有比較方式
當兩種排序都存在時,以比較器為主
|--- hashset: 底層資料結構是雜湊表,執行緒不同步
hashset 是如何保證元素的唯一性:
是通過元素的兩個方法,hashcode 和 equals 來完成的
如果元素 hashcode 相同,才會判斷 equals 是否為 true
如果元素 hashcode 不相同,就不會呼叫 equals 方法
注意: 對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的 hashcsode() 和 equals() 方法
list 集合判斷元素是否相同,依據的是元素的 equals() 方法 arraylist; 注意它們的區別
map 集合:該集合儲存鍵值對,而且要保證鍵值的唯一性
雙列儲存集合
|--- hashmap: 底層是雜湊表資料結構,允許使用 null 鍵 null 值。該集合是不同步的 jdk 1.2 效率高
|--- treemap: 底層是二叉樹資料結構,執行緒不同步。可以用於給 map 集合中的鍵進行排序。
和 set 很像,set 底層就是使用 map集合
|--- hashtable: 底層是雜湊表資料結構,不可以存入 null 鍵 null 值。該集合是執行緒同步的; jdk 1.0 效率低
1.新增
put( key , value)
2.刪除
clear()
remove( object key)
3.判斷
containskey( object key)
containsvalue( object value)
isempty()
4.獲取
get( object key)
size()
values()
keyset():將 map 中所有的鍵存入 set 集合,在利用迭代器方法取出鍵值,最後根據 get() 方法取出每乙個鍵值對應的值
entryset():
2. 集合框架 collection list set arraylist linklist vector treeset hashset
arraylist:
1.add()的引數型別是 object。以便於接收任意物件 2.集合中儲存的都是物件的引用
當我們使用陣列時候,長度是固定的。這樣讓我們有時候使用感覺很麻煩,所以後面就定義了集合;集合可以隨著儲存元素的增加而增加,也可以隨著元素的減少而減少。
陣列和集合的區別:
陣列:陣列既可以儲存基本資料型別,也可以儲存引用資料型別;儲存基本資料型別的時候儲存的是值,儲存引用基本資料型別的時候儲存的位址;陣列的長度是固定的,不可變的。
集合:集合只能儲存引用資料型別,不過也可以儲存基本資料型別(因為jdk新特性,會進行自動裝箱;把儲存的基本資料型別包裝成物件)。集合的長度是可變的,可以隨著元素自
動增加。
集合遍歷:陣列遍歷;迭代器遍歷
3. 迭代器介面 iterator:
iterator it = array.iterator(); 獲取迭代器,用於取出集合元素
就把取出方式定義在集合的內部,這樣取出方式就可以直接訪問集合內部的元素。
那麼取出方式就被定義成了內部類。而每個容器的資料結構不同,所以取出的動作細節也不一樣。但是都有共性內容判斷和取出。那麼可以將共性抽取。
那麼這個內部類都符合乙個規則,這個規則就是 iterator
如何獲取集合取出物件? 通過乙個對外提供的方法 iterator()
for( iterator it = vec.iterator() ; it.hasnext() ; )
迭代器是對集合進行遍歷,而每個集合內部的儲存結構都是不同的;所以每乙個集合存和取都是不同的,這樣就可能會要在每乙個類中都定義 hasnext() 和 next() 方法。這樣就會
讓整個集合體系變得非常的臃腫。迭代器就是將這些方法向上抽出為介面,然後各個類實現介面的方法。
好處:規範了集合的遍歷方式,整個集合體系都是使用 hasnext() 和 next() 方法來進行遍歷;**實現了底層封裝實現,這樣使用者不用知道怎麼實現的,只要知道使用即可。
4. list:元素是有序的,元素可以重複。因為該集合體系有索引
set:元素是無序的,元素不可以重複
list:凡是可以操作角標的方法都是該體系特有的方法
list 特有的迭代器 listiterator: 列表迭代器(是 iterator 的子介面)
5. list集合:
包括 arraylist , linkedlist , vector ;
list 集合的特有功能:
void add(int index,e element)
e remove(int index)
e get(int index)
e set(int index,e element)
vector 特有功能:
public void addelement(e obj)
public e elementat(int index)
public enumeration elements()
陣列和鍊錶的區別:陣列查詢快但是增刪慢;鍊錶查詢慢,但是增刪快;
arraylist:底層資料結構是陣列,查詢快增刪慢;執行緒不安全,但是效率高。
vector: 底層資料結構是陣列,查詢快增刪慢;執行緒安全,但是效率不高;
linkedlist: 底層資料結構是鍊錶,查詢慢增刪快;執行緒不安全,效率高;
arraylist 和 vector 的區別:底層資料結構都是陣列;但是前者執行緒不安全,效率高;後者執行緒安全的,效率低。
arraylist 和 linkedlist 的區別:前者底層資料結構是陣列,後者底層資料結構是鍊錶;前者資料查詢快,增刪慢;後者資料查詢慢,增刪快。但是都是執行緒不安全。
使用規則:如果查詢資料多使用 arraylist;如果資料修改多使用linkedlist;如果都多使用arraylist。
6.列舉就是 vector 特有的取出方式。其實列舉和迭代器很像,簡單說就是一樣的。
只是因為列舉的名字以及方法的名稱太長了,所以逐漸被迭代器所取代
for( enumeration en = vec.elements(); en.hasmoreelements() ; )
7. list 集合判斷元素是否相同,依據的是元素的 equals() 方法 arraylist
8. set 集合的功能和 collection集合功能是一致
9. 當排序的時候,主要條件相同時,一定要判斷一下次要條件
10. collections 集合(是乙個集合框架工具類):所有方法都是靜態的,對集合進行操作的工具類。
collections.sort(); collections.max(); collections.binarysearch(); collections.fill(); collections.reverse()
collections.reverseorder(); collections.reverseorder( 也可以傳乙個比較器當引數);
11.把陣列轉換成集合有什麼好處: 可以使用集合的思想和方法來運算元組中的元素 注意:將陣列轉換成集合,不可以使用集合的增刪方法操作。因為陣列的長度是固定的
為什麼要把集合轉換成陣列: 為了限定對元素的操作,此時元素不需要進行增刪
12.高階 for 迴圈: for( string s : array)
對集合進行遍歷的時候,只能獲取元素。但是不能對集合進行操作
迭代器除了遍歷外,還可以進行 remove() 集合中元素的操作
listiterator 可以遍歷,還可以進行增刪集合元素的操作
13.jdk 1.5版本出現的新特性: 可變引數,其實就是傳遞陣列引數的簡寫形式,不用每次都去新建乙個陣列,而可以直接傳遞資料元素
注意:可變引數
一定要定義在引數列表的最後面
staticimport 靜態匯入。 當類名相同時,需要指定具體的包名;
當方法名相同時,需要指定所屬的物件或者類
14.system:類中的方法和屬性都是靜態的
獲取系統屬性資訊: properties getproperties();
15.math.ceil(); 返回大於指定資料的最小整數 math.floor();返回小於指定資料的最大整數
math.round();四捨五入 math.pow( 2,3);輸出8 二的三次方
math.random();隨機數 返回大於等於0且小於1的隨機數
java基礎之集合
集合的型別與各自的特性 collection 單列集合 list 有儲存順序,可重複 arraylist 陣列實現,查詢快,增刪慢由於是陣列實現,在增和刪的時候會牽扯到陣列增容,以及拷貝元素,所以慢。陣列是可以直接按索引查詢,所以查詢時較快。linkedlist 鍊錶實現,增刪快,查詢慢由於鍊錶實現...
java基礎之集合
集合容器因為內部的資料結構不同,有多種具體容器。不斷的向上抽取,就形成了集合框架。框架的頂層collection介面 collection的常見方法 1.新增 boolean add object obj boolean addall collection coll 2.刪除 boolean rem...
Java基礎之集合
list 和set 都是conllection 介面的子介面。list 中的元素是有順序的,可以重複的。set中的額元素是沒有順序的,不可以重複的.set是通過hashcode 和equals 比較元素是否重複的。先使用hashcode 方法判斷已經存在 hashset 中元素的 hashcode ...