java基礎之集合

2021-07-07 07:24:12 字數 4884 閱讀 3776

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 ...