詳解集合(啥都有 )

2021-09-25 23:25:42 字數 4681 閱讀 4227

集合就是乙個儲存資料的容器,把同型別的資料放在乙個容器裡,便於管理

集合陣列

長度不固定

長度固定

只能儲存引用型別的資料

可以儲存引用型別和基本型別的資料

集合長度不固定的原因:

如果底層維護的是鍊錶(linkedlist),則長度自然不固定

以底層維護陣列的arraylist為例:源**中寫入了grow方法,在達到一定容量的時候,再新增元素,就呼叫grow方法(自動擴容)

介面不能例項化物件,所以要借助實現類來完成方法

常用方法:

add(e e) 新增元素

addall(collection extends e> c) 新增集合中的元素到呼叫者集合裡

clear() 清空集合

contains(object o) 集合中,是否包含o

containsall(collection> c) 傳入集合是不是呼叫者的子集

equals(object o) 比較collection與指定物件是否相等

isempty() 集合是否為空

remove(object o) 刪除元素

removeall(collection> c) 刪除交集

retainall(collection> c) 保留交集

size() 陣列中包含的元素個數

toarray() 轉換成陣列

iterator() 獲取迭代器,用於遍歷

迭代器的方法:

hasnext() 判斷迭代器是否存在下乙個元素可以迭代

next() 迭代器迭代下乙個元素

remove() 從迭代器指向的 collection 中移除迭代器返回的最後乙個元素(可選操作)

特點:有序,可重複

常用方法:

add(int index, e element) 新增元素

addall(int index, collection extends e> c) 在指定位置新增集合

containsall(collection> c) 傳入集合是否是呼叫集合的子集

get(int index) 獲取下標為index的元素

indexof(object o) 查詢傳入元素第一次出現位置的下標

lastindexof(object o) 查詢元素最後一次出現位置的下標

remove(int index) 刪除下標為index的元素

set(int index, e element) 修改下標為index的元素為e

sublist(int fromindex, int toindex) 從集合中擷取元素,包括fromindex,不包括toindex

listiterator() 特有迭代器

特有迭代器(listitertor)方法:

boolean hasnext();

object next();

void remove(); 一定要刪除通過next獲取到的元素,不能單獨存在

add(object o);

set(object o);

int nextindex();

hasprevious(); 是否有上乙個元素

object previous(); 向前移動獲取資料

arraylist

特點:1.有序,可重複

2.增刪慢,查詢快

由於底層維護的是乙個object型別的【陣列】,所以增刪較慢,原因如下:

增加有可能呼叫grow(). 導致資料的拷貝,刪除乙個元素,該元素之後的元素會向前移動

由於陣列有下標,所以查詢較快

如果在例項化時不給長度,則預設為10

呼叫arraylist無參構造方法,底層會建立乙個預設容量為10的object型別陣列,如果呼叫的是帶有引數的

構造方法,arraylist(int initcapacity) 會根據你傳入的initcapacity 來建立對應元素個數的object陣列

陣列長度可變原因:往上翻翻唄

特有方法:

ensurecapacity(int mincapactiy) 可見在新增大量元素前,並且元素數量可預知的情況下,可以盡量使用ensurecapacity方法來指定arraylist的大小,從而提高效率

trimtosize(); 把陣列長度擷取到元素個數,節省空間

linkedlist

特點:1.有序,可重複

2.增刪快,查詢慢

由於底層維護的是乙個【雙向鍊錶】,在增刪時,不牽涉到資料的copy,效率較高

由於沒有下標,無法根據下標獲取元素,查詢較慢

特有方法:

getfirst();

getlast();

addfirst();

addlast(object o) == add(object o)

removefirst();

removelast();

特點:無序,不可重複

常用方法:與collection中的方法一樣

特有方法: 無

hashset

特點:無序,不可重複

儲存時:可以存入null值

構造方法: 本質其實就是hashmap的鍵

public

hashset()

儲存結構:hash表

1.預設長度16

2.載入因子0.75

元素容量達到總數的75%時,就擴容,擴容時翻倍

區別陣列:陣列擴容為原來的1.5倍 newcapacity = oldcapacity + (oldcapacity >> 1)

3.hash表結構

jdk1.7之前:陣列 + 鍊錶

jdk1.7之後:陣列 + 鍊錶 + 紅黑樹

4.儲存過程【有點重點呦!!】

先根據hashcode(),計算值,通過【移位運算】,計算在hash表中的位置

如果在這個位置沒有元素,直接插入

如果有元素,再呼叫equals方法比較

相同:不新增;不同:新增

5.判斷插入元素是否重複

通常自己重寫hasgcode()和equals()方法

linkedhashset

特點:有序,不可重複

儲存結構:hash表 + 鍊錶

又加入了乙個鍊錶,來記錄插入順序

treeset

構造方法: 其實就是treemap的鍵

public

treeset()

treeset集合是可以給元素進行重新排序的乙個set介面的實現

排序:1.預設使用的是自然順序

自然數,字母表的順序

2.如果儲存的是物件,需要自定義排序規則

1.建立物件時,讓儲存的物件遵從comparable介面,重寫compareto方法

@override

public

intcompareto

(student o)

2.建立集合時,傳入comparator介面(通常用匿名內部類的方式傳入),實現compare介面

treeset

students =

newtreeset

<

>

(new

comparator

()})

;

1.迭代器

2.增強for迴圈(增強for迴圈是建立在迭代器的基礎之上的,底層原理也是乙個迭代器的使用)

//建立集合物件

arraylist

list =

newarraylist

<

>()

;//新增

list.

add(

"人參果");

list.

add(

"蘋果");

list.

add(

"榴蓮");

list.

add(

"牛油果");

list.

add(

"人參果");

list.

add(

"荔枝");

list.

add(

"仙桃");

//迭代器遍歷

iterator

iterator = list.

iterator()

;while

(iterator.

hasnext()

)//特有迭代器

//順序迭代

listiterator

listiterator = list.

listiterator()

;while

(listiterator.

hasnext()

)//倒序

while

(listiterator.

hasprevious()

)//增強for

for(string s : list)

健康食品裡面都有啥

1 西紅柿。西紅柿的酸味能促進胃液分泌,幫助消化蛋白質等。西紅柿中豐富的維生素c能製造出骨膠原,強健血管。西紅柿中的礦物質以鉀的含量最豐富,有助於排出血液中的鹽分,具有降血壓的功能。2 黃豆。黃豆中含有植物性荷爾蒙,有利於女性,同時,黃豆也是男性的絕佳食品。常吃黃豆製品的日本男人,罹患前列腺癌的概率...

資料中心評估服務都有啥

乙個資料中心的好與差總歸要有一些衡量的標準,就像在學校評三好學生一樣,總要有一些衡量的東西。如果是自家的資料中心,自然不必做過多的宣傳,自己用好就是真的好,而如果是向外 廣大公眾提供服務的資料中心,就要多多對外宣傳資料中心積極正面的形象,以便吸引更多的使用者使用資料中心的應用服務,這樣就需要對資料中...

python函式都有啥 Python函式及其引數

定義函式def def myfirstfunction print 第乙個函式 myfirstfunction 第乙個函式 函式的引數 def mysecondfunction name print name iloveyou mysecondfunction wc wciloveyou def a...