集合就是乙個儲存資料的容器,把同型別的資料放在乙個容器裡,便於管理
集合陣列
長度不固定
長度固定
只能儲存引用型別的資料
可以儲存引用型別和基本型別的資料
集合長度不固定的原因:
如果底層維護的是鍊錶(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...