JavaSE-List/Map/Queue

List-Collection的子接口,可重復(fù)集,并且有序,根據(jù)下表操作元素

ArrayList (線性數(shù)據(jù)表) 使用數(shù)組實(shí)現(xiàn),查詢(xún)更快
1.E set(int index, E e) 將給定的元素插入到指定的位置,返回值為原位置上的元素,相當(dāng)于替換元素操作

List<String> list = new ArrayList<String>();
list.add("one");list.add("two");list.add("three");list.add("four");
System.out.println(list);//[one,two,three,four]
String old = list.set(1, "2");
System.out.println(old);//two
System.out.println(list);//[one,2,three,four]

2.E get(int index) 獲取給定下標(biāo)的元素

String str = list.get(2);//獲取第三個(gè)元素
System.out.println(str);//three

3.List提供了重載的add和remove方法,分別用于插入元素到指定位置和刪除指定位置的元素的方法

list.add(1,"thero");//將thero插入到第一個(gè)位置,該位置以后元素向后挪動(dòng)位置
System.out.println(list);//[one,thero,2,three,four]
String deleted = list.remove(2);
System.out.println(deleted);//2
System.out.println(list);//[one,thero,three,four]

4.for循環(huán)遍歷List

for(int i=0;i<list.size();i++){
  String str = list.get(i);
  System.out.println(str);//one thero three four
}

5.List subList(int start, int end) 取子集,含頭不含尾

List<String> subList = list.subList(0, 2);
System.out.println(subList);//[one,thero]
List<Integer> list2 = new ArrayList<Integer>();
for(int i=0;i<10;i++){
     list2.add(i);
}
System.out.println(list2);//[1,2,3,4,5,6,7,8,9]
//取子集3-6,并擴(kuò)大10倍
List<Integer> subList2 = list2.subList(2,6);
System.out.println(subList2);//[3,4,5,6]
for(int i=0;i<subList2.size();i++){
     sublist2.set(i, subList2.get(i)*10);
}
//對(duì)子集的修改,就是對(duì)原集合的修改
System.out.println(list2);//[1,2,30,40,50,60,7,8,9]
//批量刪除一組元素,30-60
list2.subList(2, 6).clear();
System.out.println(list2);//[1,2,7,8,9]

LinkedList(鏈表)

LinkedList和ArrayList一樣都實(shí)現(xiàn)了List接口,相比ArrayList而言,LinkedList執(zhí)行增刪操作的效率更高,這是由于LinkedList是由一個(gè)雙向列表實(shí)現(xiàn)的,列表中的每個(gè)元素是一個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都持有對(duì)上一個(gè)和下一個(gè)元素的引用,刪除操作可以不用移動(dòng)其他元素的位置,只需讓持有該元素引用的元素不在持有,轉(zhuǎn)而持有下一個(gè)元素的引用即可。其操作方式和ArrayList相同。
因此在選擇ArrayList和LinkedList時(shí),需要按照具體需求而定,如果是需要快速的查找元素則選擇ArrayList,如果需要快速大量的增刪元素則選擇LinkedList。

Map-java.util 提供的一種存儲(chǔ)元素的形式

Map中的元素以一種Key-Value的方式存儲(chǔ),稱(chēng)為鍵值對(duì),每一個(gè)key映射一個(gè)value,Map是Dictionary的替代者,主要的作用是快速的查找,就像現(xiàn)實(shí)生活中的字典一樣。Map和List沒(méi)有本質(zhì)上的關(guān)系。Map主要的實(shí)現(xiàn)類(lèi)有HashMap和TreeMap,這里主要介紹常用的HashMap。
HashMap 散列表
1.構(gòu)造方法
HashMap提供了兩種構(gòu)造方法,帶參和不帶參構(gòu)造,和其他集合或者隊(duì)列一樣,帶參構(gòu)造依靠傳入一個(gè)Map來(lái)實(shí)現(xiàn)初始化或者復(fù)制操作

Map<String, Integer> map1 = new HashMap<String, Integer>();
Map<String, Integer> map2 = new HashMap<String, Integer>(map1);

2.V put(K k, V v) 將給定的key-value對(duì)存入到Map中,Map要求key不可以重復(fù),如果put的鍵值對(duì)的key不存在與Map中,則返回一個(gè)null,若是key已存在,則相當(dāng)于替換value操作,添加新value,將原來(lái)的value返回

map1.put("語(yǔ)文", 98);map1.put("數(shù)學(xué)", 90);
map1.put("外語(yǔ)", 98);map1.put("體育", 89);
System.out.println(map1);//{語(yǔ)文=98,數(shù)學(xué)=90,外語(yǔ)=98,體育=89}
Integer history= map1.put("歷史", 92);
System.out.println(history);//null
Integer math = map1.put("數(shù)學(xué)", 100);
System.out.println(math);//90

3.V get(K k) 根據(jù)給定的key返回對(duì)應(yīng)的value,若不存在給定的value,則返回null

englishScore = map1.get("外語(yǔ)");
System.out.println(englishScore);//98

4.V remove(K k) 根據(jù)給定的key刪除當(dāng)前Map中的key-value對(duì),返回值為刪除的value

Integer score = map1.remove("語(yǔ)文");
System.out.println(score);//98
System.out.println(map1);//{數(shù)學(xué)=100,外語(yǔ)=98,體育=89,歷史", 92}

Map的遍歷 遍歷Map有三種方式,遍歷key,遍歷key-value對(duì),遍歷value(不常用)
1.Set<K> keySet() 該方法會(huì)將返回Map中所有的key并存入一個(gè)Set集合,由于Map中的key不允許重復(fù),而Set集合的特性便是不可重復(fù),所以用Set接收

Set<String> keySet = map1.keySet();
for(String key : keySet){
    System.out.println("key:"+key);//key:體育key:數(shù)學(xué)key:語(yǔ)文key:外語(yǔ)
}

2.Set<Entry> entrySet 遍歷每一組鍵值對(duì),Entry是Map接口的一個(gè)內(nèi)部接口,每一組鍵值對(duì)都可以通過(guò)一個(gè)Entry實(shí)例來(lái)表示,Entry也支持泛型參數(shù),它有兩個(gè)內(nèi)部方法,K getKey()和 V getValue(),可以將一個(gè)Entry實(shí)例的key和value返回。entrySet方法就是將Map中的每一組鍵值對(duì)通過(guò)Entry實(shí)例返回為一個(gè)Set集合,由于Map中鍵值對(duì)是不可重復(fù)的,所以用Set集合來(lái)接收

Set<Entry<String, Integer>>  entrySet= map1.entrySet();
for(Entry<String, Integer> entry: entrySet){
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println("key:"+key);//key:體育key:數(shù)學(xué)key:語(yǔ)文key:外語(yǔ)
    System.out.println("value:"+value);
    //value:99value:97value:98value90
}

3.Collection values() 返回Map中所有的value

Collection<Integer> c = map1.values();
for(Integer value : c){
    System.out.println("value:"+value);//value:99value:97value:98value90
}

Queue-隊(duì)列 Collection接口的子接口

Queue是一種將元素賦予優(yōu)先級(jí)的數(shù)據(jù)結(jié)構(gòu),存取元素必須遵循FIFO(First in First out)先進(jìn)先出的原則,這種結(jié)構(gòu)類(lèi)似于排隊(duì),先來(lái)后到,先offer的元素會(huì)排在第一位,取出元素時(shí)也從第一個(gè)開(kāi)始。我們Windows系統(tǒng)的進(jìn)程列表就是一個(gè)隊(duì)列,先創(chuàng)建的進(jìn)程會(huì)排在前面。
由于隊(duì)列增刪元素必須從隊(duì)首開(kāi)始,所以為了提高增刪的效率,我們一般使用鏈表LinkedList來(lái)實(shí)現(xiàn)Queue接口
1.boolean offer<E> 添加元素,添加成功返回true

Queue<String> queue = new LinkedList<String>();
queue.offer("one");queue.offer("two");
queue.offer("three");queue.offer("four");
System.out.println(queue);//[one, two, three, four, five, six]

2.E poll() 出隊(duì)操作,從隊(duì)首獲取一個(gè)元素,獲取該元素后,該元素就從隊(duì)列中刪除了

String str = queue.poll();
System.out.println(str);//one
System.out.println(queue);//[two, three, four, five, six]

3.E peek() 引用隊(duì)首元素,但是不做刪除操作 peek(瞟一眼的意思,非常形象)

String str1 = queue.peek();
System.out.println(str1);//two
System.out.println(queue);//[two, three, four, five, six]

4.遍歷一個(gè)隊(duì)列

//for循環(huán)遍歷
for(int i=queue.size();i>0;i--){
    String str = queue.poll();
    System.out.println(str);
}
//while循環(huán)遍歷
while(queue.size()>0){
    String str = queue.poll();
    System.out.println(str);
}
System.out.println("遍歷結(jié)束:"+queue.size());//0

Deque和Stack
Deque是一個(gè)雙端隊(duì)列,兩端都可以進(jìn)出棧,通常我們只從它的一端進(jìn)行進(jìn)出操作,而這樣就形成了棧Stack,棧就像一個(gè)彈夾一樣,要遵循現(xiàn)進(jìn)后出的原則,或者后進(jìn)先出。而通常我們利用這一特征來(lái)實(shí)現(xiàn)后退功能,比如Windows的文件管理系統(tǒng)就是典型的棧。
1.void push(E e) 進(jìn)棧操作

Deque<String> stack = new LinkedList<String>();
stack.push("one");stack.push("two");
stack.push("three");stack.push("four");
System.out.println(stack);//[four, three, two, one]

2.void pop(E e) 出棧操作

while(stack.size()>0){
    String str = stack.pop();
    System.out.println(str);//four three two one
}
System.out.println(stack.size());//0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容