0.提要
- List接口的實(shí)現(xiàn)類
List接口的常用實(shí)現(xiàn)類有ArrayList
與LinkedList
.
ArrayList
類
a. 實(shí)現(xiàn)了可變的數(shù)組
诅迷,允許保存所有元素
约素,包括null
,并可以根據(jù)索引位置對(duì)集合進(jìn)行快速的隨機(jī)訪問;
b. 缺點(diǎn)是向指定的索引位置插入對(duì)象或刪除對(duì)象的速度較慢贝攒。LinkedList
類
a.采用鏈表結(jié)構(gòu)
保存對(duì)象。
b.優(yōu)點(diǎn)是便于向集合中插入和刪除對(duì)象时甚,需要向集合中插入隘弊、刪除對(duì)象
時(shí)哈踱,使用LinkedList類實(shí)現(xiàn)的List集合的效率較高:
c. 但對(duì)于隨機(jī)訪問集合中的對(duì)象
,使用LinkedList類實(shí)現(xiàn)List集合的效率較低梨熙。
- Set集合
- Set集合中的對(duì)象
不按特定的方式排序
开镣,只是簡(jiǎn)單地把對(duì)象加入集合中
;- Set集合中
不能包含重復(fù)對(duì)象
咽扇;- Set集合由
Set接口
和Set接口的實(shí)現(xiàn)類
組成邪财。- Set接口繼承了
Collection接口
,因此包含Collection接口的所有方法
质欲。
Set接口常用的實(shí)現(xiàn)類有HashSet類
與TreeSet類
树埠。HashSet
類
a. 實(shí)現(xiàn)Set接口
,由哈希表(實(shí)際上是一個(gè)HashMap實(shí)例)
支持嘶伟。
b. 它不保證Set的迭代順序
怎憋,特別是它不保證該順序恒久不變
。
c .此類允許使用null元素
九昧。TreeSet
類
a. 不僅實(shí)現(xiàn)了Set接口
绊袋,還實(shí)現(xiàn)了java.util.SortedSet接口
,
b. 因此铸鹰,TreeSet類實(shí)現(xiàn)的Set集合在遍歷集合時(shí)
按照自然順序遞增排序
癌别;*********%%%%%%%%%%***********
c. 也可以按照指定比較器
遞增排序;
d. 即可以通過比較器對(duì)用TreeSet類實(shí)現(xiàn)的Set集合中的對(duì)象進(jìn)行排序蹋笼。
- Map集合
- Map集合沒有繼承
Collection
接口展姐,其提供的是key到value的映射
;- Map中不能包含相同的
key
,每個(gè)key
只能映射一個(gè)value
姓建;- key還決定了
存儲(chǔ)對(duì)象在映射中的存儲(chǔ)位置
诞仓,
但不是由key對(duì)象本身
決定的,而是通過一種“散列技術(shù)”
進(jìn)行處理速兔,產(chǎn)生一個(gè)散列碼的整數(shù)值
墅拭;散列碼
通常用作一個(gè)偏移量
,該偏移量對(duì)應(yīng)分配給映射的內(nèi)存區(qū)域的起始位置
涣狗,從而確定存儲(chǔ)對(duì)象在映射中的存儲(chǔ)位置
谍婉;- Map集合包括Map接口以及Map接口的所有實(shí)現(xiàn)類。
- Map接口
- Map接口提供了將key映射到值的對(duì)象镀钓。
- 一個(gè)映射不能包含重復(fù)的key穗熬,每個(gè)key最多只能映射到一個(gè)值。
- Map接口中同樣提供了集合的常用方法丁溅,除此之外還包括如下表所示的常用方法:
注意:Map集合中允許值對(duì)象是null唤蔗,而且沒有個(gè)數(shù)限制,例如,可通過“map.put("05",null)”語(yǔ)句向集合中添加對(duì)象妓柜。
- 5.2 Map接口的實(shí)現(xiàn)類
- Map接口常用的實(shí)現(xiàn)類有
HashMap
和TreeMap
箱季;- 建議使用
HashMap類
實(shí)現(xiàn)Map集合;- 由
HashMap類
實(shí)現(xiàn)的Map集合添加和刪除映射關(guān)系效率更高
棍掐;- HashMap是基于
哈希表
的Map接口
的實(shí)現(xiàn)藏雏;- HashMap通過
哈希碼
對(duì)其內(nèi)部的映射關(guān)系進(jìn)行快速查找
;TreeMap
中的映射關(guān)系存在一定的順序
作煌;- 如果希望Map集合中的對(duì)象也存在一定的順序掘殴,應(yīng)該使用TreeMap類實(shí)現(xiàn)Map集合。
HashMap
類
a .是基于哈希表的Map接口的實(shí)現(xiàn)粟誓;
b. 此實(shí)現(xiàn)提供所有可選的映射操作
奏寨,并允許使用null值和null鍵
,但必須保證鍵的唯一性
努酸。
c .HashMap通過哈希表對(duì)其內(nèi)部的映射關(guān)系進(jìn)行快速查找
服爷。
d. 此類不保證
映射的順序,特別是它不保證該順序恒久不變获诈。
TreeMap
類
a. 不僅實(shí)現(xiàn)了Map接口仍源,還實(shí)現(xiàn)了java.util.SortedMap接囗,因此舔涎,集合中的映射關(guān)系具有一定的順序笼踩。
b. 但在添加、刪除和定位映射關(guān)系
時(shí)亡嫌,TreeMap類比HashMap類性能稍差
嚎于。
c. 由于TreeMap類實(shí)現(xiàn)的Map集合中的映射關(guān)系是根據(jù)鍵對(duì)象
按照一定的順序排列
的,因此不允許鍵對(duì)象是null
挟冠。
- **可以通過HashMap類創(chuàng)建Map集合于购,
當(dāng)需要順序輸出時(shí),再創(chuàng)建一個(gè)完成相同映射關(guān)系的TreeMap類實(shí)例知染。如文中綜合實(shí)例:**
1. 集合類概述
1.1. java.util包中提供了一些集合類肋僧,這些集合類又被稱為容器。
1.2. 關(guān)于容器控淡,集合類與數(shù)組的不同之處:
- 數(shù)組的長(zhǎng)度是
固定
的嫌吠,集合的長(zhǎng)度是可變
的; - 數(shù)組用來存放
基本類型的數(shù)據(jù)
掺炭,集合用來存放對(duì)象的引用
辫诅。
1.3. 常用的集合有List集合、Set集合和Map集合涧狮;
List與Set繼承了Collection接口
炕矮,各接口
還提供了不同的實(shí)現(xiàn)類
么夫。
常用集合類的繼承關(guān)系如下:
2. Collection接口
- Collection接口是層次結(jié)構(gòu)中的根接口;
- 構(gòu)成Collection的單位稱為
元素
肤视; - Collection接口通常不能直接使用魏割,但該接口提供了
添加元素、刪除元素钢颂、管理數(shù)據(jù)
的方法。 -
由于List接口與Set接口都繼承了Collection接口拜银,因此這些方法對(duì)List集合與Set集合是通用的殊鞭。
常用方法如下表:
下面是一個(gè)綜合實(shí)例,把表中的方法都用一遍:
(Ps:
- iterator迭代器有點(diǎn)兒像一個(gè)指針一樣的東西尼桶,指向list對(duì)象中的某一個(gè)元素操灿;
- it.hasNext()中迭代器的hasNext()第一次用的時(shí)候,指向第一個(gè)元素泵督,next()同理)
package com.lzw;
import java.util.*;
public class Muster { // 創(chuàng)建類Muster
public static void main(String args[]) {
Collection<String> list = new ArrayList<>(); // 實(shí)例化集合類對(duì)象
list.add("a"); // 向集合添加數(shù)據(jù)
list.add("b");
list.add("c");
list.add("d");
list.add("e");
System.out.println("Now add a&b&c&d&e to the list , its size is:"+list.size());
System.out.println("Print out all element of the list:");
Iterator<String> it = list.iterator(); // 創(chuàng)建迭代器
while (it.hasNext()) { // 判斷是否有下一個(gè)元素
String str = (String) it.next(); // 獲取集合中元素
System.out.println(str);
}
System.out.println("------------------------------------------------");
list.remove("a");
list.remove("b");
list.remove("c");
System.out.println("Now remove a&b&c of the list , its size is:"+list.size());
System.out.println("Print out all element of the list:");
Iterator<String> it1 = list.iterator();
while(it1.hasNext()){
String str = (String)it1.next();
System.out.println(str);
}
System.out.println("Now is the list Empty? "+list.isEmpty());
System.out.println("------------------------------------------------");
list.remove("d");
list.remove("e");
System.out.println("Now remove d&e of the list , its size is:"+list.size());
System.out.println("Now is the list Empty? "+list.isEmpty());
}
}
輸出結(jié)果:
Now add a&b&c&d&e to the list , its size is:5
Print out all element of the list:
a
b
c
d
e
------------------------------------------------
Now remove a&b&c of the list , its size is:2
Print out all element of the list:
d
e
Now is the list Empty? false
------------------------------------------------
Now remove d&e of the list , its size is:0
Now is the list Empty? true
3. List集合
- List集合包括List接口以及
接口
的所有實(shí)現(xiàn)類
趾盐。 - List集合中的元素
允許重復(fù)
,各元素的順序
就是對(duì)象插入的順序
小腊。 - 類似Java數(shù)組救鲤,用戶可通過使用
索引(元素在集合中的位置)
來訪問集合中的元素。
3.1 List接口
List接口繼承了Collection接口
秩冈,因此包含Collection中的所有方法本缠。
此外,List接口還定義了以下兩個(gè)非常重要的方法:
get(int index)
:獲得指定索引位置的元素;
set(int index入问,Object obj)
:將集合中指定索引位置的對(duì)象修改為指定的對(duì)象丹锹。
3.2 List接口的實(shí)現(xiàn)類
List接口的常用實(shí)現(xiàn)類有ArrayList
與LinkedList
.
ArrayList
類
a. 實(shí)現(xiàn)了可變的數(shù)組
,允許保存所有元素
芬失,包括null
,并可以根據(jù)索引位置對(duì)集合進(jìn)行快速的隨機(jī)訪問楣黍;
b. 缺點(diǎn)是向指定的索引位置插入對(duì)象或刪除對(duì)象的速度較慢。
LinkedList
類
a.采用鏈表結(jié)構(gòu)
保存對(duì)象棱烂。
b.優(yōu)點(diǎn)是便于向集合中插入和刪除對(duì)象租漂,需要向集合中插入、刪除對(duì)象
時(shí)垢啼,使用LinkedList類實(shí)現(xiàn)的List集合的效率較高:
c. 但對(duì)于隨機(jī)訪問集合中的對(duì)象
窜锯,使用LinkedList類實(shí)現(xiàn)List集合的效率較低。
使用List集合時(shí)通常聲明
為L(zhǎng)ist類型芭析,可通過不同的實(shí)現(xiàn)類
來實(shí)例化
集合锚扎。
分別通過ArrayList
、LinkedList
類實(shí)例化List集合
馁启,代碼如下:
List<E> list = new ArrayList<>();
List<E> list2 = new LinkedList<>();
在上面的代碼中驾孔,E
可以是合法的Java數(shù)據(jù)類型
芍秆。
例如,如果集合中的元素為字符串類型
翠勉,那么E
可以修改為String
妖啥。
下面是一個(gè)綜合實(shí)例:
import java.util.*;
public class Gather { // 創(chuàng)建類Gather
public static void main(String[] args) { // 主方法
List<String> list = new ArrayList<>(); // 創(chuàng)建集合對(duì)象
list.add("a"); // 向集合添加元素
list.add("b");
list.add("c");
list.add("d");
list.add("e");
int i = (int) (Math.random() * (list.size())); // 獲得0~4之間的隨機(jī)數(shù)
System.out.println("隨機(jī)獲取數(shù)組中的元素:" + list.get(i));
list.remove(2); // 將指定索引位置的元素從集合中移除
System.out.println("將索引是'2'的元素從數(shù)組移除后,數(shù)組中的元素是:");
for (int j = 0; j < list.size(); j++) { // 循環(huán)遍歷集合
System.out.println(list.get(j));
}
}
}
輸出結(jié)果:
隨機(jī)獲取數(shù)組中的元素:c
將索引是'2'的元素從數(shù)組移除后对碌,數(shù)組中的元素是:
a
b
d
e
4. Set集合
- Set集合中的對(duì)象
不按特定的方式排序
荆虱,只是簡(jiǎn)單地把對(duì)象加入集合中
; - Set集合中
不能包含重復(fù)對(duì)象
朽们; - Set集合由
Set接口
和Set接口的實(shí)現(xiàn)類
組成怀读。 - Set接口繼承了
Collection接口
,因此包含Collection接口的所有方法
骑脱。
Set接口常用的實(shí)現(xiàn)類有HashSet類
與TreeSet類
菜枷。
HashSet
類
a. 實(shí)現(xiàn)Set接口
,由哈希表(實(shí)際上是一個(gè)HashMap實(shí)例)
支持叁丧。
b. 它不保證Set的迭代順序
啤誊,特別是它不保證該順序恒久不變
。
c .此類允許使用null元素
拥娄。
TreeSet
類
a. 不僅實(shí)現(xiàn)了Set接口
蚊锹,還實(shí)現(xiàn)了java.util.SortedSet接口
,
b. 因此条舔,TreeSet類實(shí)現(xiàn)的Set集合在遍歷集合時(shí)
按照自然順序遞增排序
枫耳;*********%%%%%%%%%%***********
c. 也可以按照指定比較器
遞增排序;
d. 即可以通過比較器對(duì)用TreeSet類實(shí)現(xiàn)的Set集合中的對(duì)象進(jìn)行排序孟抗。
TreeSet類新增的方法如下表:
幾個(gè)需要注意的地方:
compareTo()
方法中書寫的內(nèi)容正是TreeSet類實(shí)現(xiàn)的Set集合在遍歷集合時(shí)
那自然順序遞增排序
的依據(jù)迁杨;- 使用
compareTo()
方法的前提是要讓使用的類實(shí)現(xiàn)Comparable接口
;- Set順序遍歷時(shí)凄硼,依據(jù)
compareTo()
方法中書寫的規(guī)則進(jìn)行自然順序遞增排序
铅协,而非add()
的順序;- headSet()/subSet()/tailSet()三個(gè)方法再截取時(shí)摊沉,所謂的“之前狐史、之后、之間”也是相對(duì)于
自然順序遞增排序
之的Set結(jié)合说墨,而非add()
的順序骏全;- 注意上表中
包含
和不包含
的運(yùn)用;
(可參考下面實(shí)例加深了解)
下面是一個(gè)綜合實(shí)例:
import java.util.*;
public class UpdateStu implements Comparable<Object> {
String name;
long id;
//構(gòu)造方法
public UpdateStu(String name, long id) {
this.id = id;
this.name = name;
}
//定義排序規(guī)則
public int compareTo(Object o) {
UpdateStu upstu = (UpdateStu) o;
int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
return result;
}
//getter & setter
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
UpdateStu stu1 = new UpdateStu("李同學(xué)", 01011);//吶尼斧!01011是八進(jìn)制=薄!9卓谩Bタ取Oê础!D噶S嗟ⅰ!F谎5帧!9煊颉B粕隆!8硗Α!
UpdateStu stu2 = new UpdateStu("陳同學(xué)", 01021);
UpdateStu stu3 = new UpdateStu("王同學(xué)", 01051);
UpdateStu stu4 = new UpdateStu("馬同學(xué)", 01012);
TreeSet<UpdateStu> tree = new TreeSet<>();
tree.add(stu1);
tree.add(stu2);
tree.add(stu3);
tree.add(stu4);
Iterator<UpdateStu> it = tree.iterator();
System.out.println("Set集合中的所有元素:");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
System.out.println("李馬陳王是自然排序怜浅,其對(duì)應(yīng)的對(duì)象名順序是:");
System.out.println("stu1");
System.out.println("stu4");
System.out.println("stu2");
System.out.println("stu3");
System.out.println(" ");
System.out.println("tree.first().getName():" + tree.first().getName());
System.out.println("tree.last().getName():" + tree.last().getName());
System.out.println("------------------------------------------------");
it = tree.headSet(stu3).iterator();
System.out.println("截取stu3前面部分的集合:");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
System.out.println("------------------------------------------------");
it = tree.subSet(stu2, stu3).iterator();
System.out.println("截取stu2&stu3中間部分的集合");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
System.out.println("------------------------------------------------");
it = tree.tailSet(stu1).iterator();
System.out.println("截取stu1后面部分的集合");
while (it.hasNext()) {
UpdateStu stu = (UpdateStu) it.next();
System.out.println(stu.getId() + " " + stu.getName());
}
}
}
輸出結(jié)果:
Set集合中的所有元素:
521 李同學(xué)
522 馬同學(xué)
529 陳同學(xué)
553 王同學(xué)
李馬陳王是自然排序铐然,其對(duì)應(yīng)的對(duì)象名順序是:
stu1
stu4
stu2
stu3
tree.first().getName():李同學(xué)
tree.last().getName():王同學(xué)
------------------------------------------------
截取stu3前面部分的集合:
521 李同學(xué)
522 馬同學(xué)
529 陳同學(xué)
------------------------------------------------
截取stu2&stu3中間部分的集合
529 陳同學(xué)
------------------------------------------------
截取stu1后面部分的集合
521 李同學(xué)
522 馬同學(xué)
529 陳同學(xué)
553 王同學(xué)
最后強(qiáng)調(diào):
- 存入
TreeSet類
實(shí)現(xiàn)的set集合
必須實(shí)現(xiàn)Comparable接口
,該接口中的compareTo(Object o)
方法
比較此對(duì)象(this/實(shí)現(xiàn)本接口的類的實(shí)例化對(duì)象)
與指定對(duì)象(傳進(jìn)來的作為參數(shù)的對(duì)象)
的順序恶座; - 如果該對(duì)象小于搀暑、等于或大于指定對(duì)象,則分別返回負(fù)整數(shù)跨琳、0或正整數(shù)自点。
5. Map集合
- Map集合沒有繼承
Collection
接口,其提供的是key到value的映射
脉让; - Map中不能包含相同的
key
,每個(gè)key
只能映射一個(gè)value
桂敛; - key還決定了
存儲(chǔ)對(duì)象在映射中的存儲(chǔ)位置
,但不是由key對(duì)象本身
決定的溅潜,而是通過一種“散列技術(shù)”
進(jìn)行處理术唬,產(chǎn)生一個(gè)散列碼的整數(shù)值
; -
散列碼
通常用作一個(gè)偏移量
滚澜,該偏移量對(duì)應(yīng)分配給映射的內(nèi)存區(qū)域的起始位置
粗仓,從而確定存儲(chǔ)對(duì)象在映射中的存儲(chǔ)位置
; - Map集合包括Map接口以及Map接口的所有實(shí)現(xiàn)類设捐。
5.1 Map接口
- Map接口提供了將key映射到值的對(duì)象借浊。
- 一個(gè)映射不能包含重復(fù)的key,每個(gè)key最多只能映射到一個(gè)值萝招。
-
Map接口中同樣提供了集合的常用方法蚂斤,除此之外還包括如下表所示的常用方法:
下面是一個(gè)綜合實(shí)例:
import java.util.*;
public class UpdateStu {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>(); // 創(chuàng)建Map實(shí)例
map.put("01", "李同學(xué)"); // 向集合中添加對(duì)象
map.put("02", "魏同學(xué)");
map.put("03", "王同學(xué)");
map.put("04", "陳同學(xué)");
map.put("05", "張同學(xué)");
map.put("06", "趙同學(xué)");
Set<String> set = map.keySet(); // 構(gòu)建Map集合中所有key對(duì)象的集合
Iterator<String> it = set.iterator(); // 創(chuàng)建集合迭代器
System.out.println("key集合中的元素(map.keySet() + iterator()):");
while (it.hasNext()) { // 遍歷集合
System.out.println(it.next());
}
System.out.println("------------------------------------------------");
Collection<String> coll = map.values(); // 構(gòu)建Map集合中所有values值集合
it = coll.iterator();
System.out.println("values集合中的元素(map.values() + iterator()):");
while (it.hasNext()) { // 遍歷集合
System.out.println(it.next());
}
System.out.println("------------------------------------------------");
System.out.println("map.get(\"01\")" + map.get("01"));
System.out.println("map.get(\"02\")" + map.get("02"));
System.out.println("map.get(\"03\")" + map.get("03"));
System.out.println("------------------------------------------------");
System.out.println("map.containsKey(\"01\")" + map.containsKey("01"));
System.out.println("map.containsKey(\"10\")" + map.containsKey("10"));
System.out.println("map.containsValue(\"李同學(xué)\")" + map.containsValue("李同學(xué)"));
System.out.println("map.containsValue(\"許同學(xué)\")" + map.containsValue("許同學(xué)"));
}
}
輸出結(jié)果:
key集合中的元素(map.keySet() + iterator()):
01
02
03
04
05
06
------------------------------------------------
values集合中的元素(map.values() + iterator()):
李同學(xué)
魏同學(xué)
王同學(xué)
陳同學(xué)
張同學(xué)
趙同學(xué)
------------------------------------------------
map.get("01")李同學(xué)
map.get("02")魏同學(xué)
map.get("03")王同學(xué)
------------------------------------------------
map.containsKey("01")true
map.containsKey("10")false
map.containsValue("李同學(xué)")true
map.containsValue("許同學(xué)")false
注意:Map集合中允許值對(duì)象是null,而且沒有個(gè)數(shù)限制即寒,例如橡淆,可通過“map.put("05",null)”語(yǔ)句向集合中添加對(duì)象召噩。
5.2 Map接口的實(shí)現(xiàn)類
- Map接口常用的實(shí)現(xiàn)類有
HashMap
和TreeMap
; - 建議使用
HashMap類
實(shí)現(xiàn)Map集合逸爵; - 由
HashMap類
實(shí)現(xiàn)的Map集合添加和刪除映射關(guān)系效率更高
具滴; - HashMap是基于
哈希表
的Map接口
的實(shí)現(xiàn); - HashMap通過
哈希碼
對(duì)其內(nèi)部的映射關(guān)系進(jìn)行快速查找
师倔;
-
TreeMap
中的映射關(guān)系存在一定的順序
构韵; - 如果希望Map集合中的對(duì)象也存在一定的順序,應(yīng)該使用TreeMap類實(shí)現(xiàn)Map集合趋艘。
HashMap
類
a .是基于哈希表的Map接口的實(shí)現(xiàn)疲恢;
b. 此實(shí)現(xiàn)提供所有可選的映射操作
,并允許使用null值和null鍵
瓷胧,但必須保證鍵的唯一性
显拳。
c .HashMap通過哈希表對(duì)其內(nèi)部的映射關(guān)系進(jìn)行快速查找
。
d. 此類不保證
映射的順序搓萧,特別是它不保證該順序恒久不變杂数。
TreeMap
類
a. 不僅實(shí)現(xiàn)了Map接口,還實(shí)現(xiàn)了java.util.SortedMap接囗瘸洛,因此揍移,集合中的映射關(guān)系具有一定的順序。
b. 但在添加反肋、刪除和定位映射關(guān)系
時(shí)那伐,TreeMap類比HashMap類性能稍差
。
c. 由于TreeMap類實(shí)現(xiàn)的Map集合中的映射關(guān)系是根據(jù)鍵對(duì)象按照一定的順序排列
的石蔗,因此不允許鍵對(duì)象是null
罕邀。
可以通過HashMap類創(chuàng)建Map集合,
當(dāng)需要順序輸出時(shí)养距,再創(chuàng)建一個(gè)完成相同映射關(guān)系的TreeMap類實(shí)例燃少。如下的綜合實(shí)例:
首先是一個(gè)Emp類文件:
public class Emp {
private String e_id;
private String e_name;
public Emp( String e_id,String e_name) {
this.e_id = e_id;
this.e_name = e_name;
}
public String getE_id() {
return e_id;
}
public void setE_id(String e_id) {
this.e_id = e_id;
}
public String getE_name() {
return e_name;
}
public void setE_name(String e_name) {
this.e_name = e_name;
}
}
測(cè)試用主類:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapText { // 創(chuàng)建類MapText
public static void main(String[] args) { // 主方法
Map<String, String> map = new HashMap<>(); // 由HashMap實(shí)現(xiàn)的Map對(duì)象
Emp emp = new Emp("351", "張三"); // 創(chuàng)建Emp對(duì)象
Emp emp2 = new Emp("512", "李四");
Emp emp3 = new Emp("853", "王一");
Emp emp4 = new Emp("125", "趙六");
Emp emp5 = new Emp("341", "黃七");
map.put(emp4.getE_id(), emp4.getE_name()); // 將對(duì)象添加到集合中
map.put(emp5.getE_id(), emp5.getE_name());
map.put(emp.getE_id(), emp.getE_name());
map.put(emp2.getE_id(), emp2.getE_name());
map.put(emp3.getE_id(), emp3.getE_name());
// Set<String> set = map.keySet(); // 獲取Map集合中的key對(duì)象集合
Iterator<String> it = map.keySet().iterator();
System.out.println("HashMap類實(shí)現(xiàn)的Map集合,無(wú)序:");
while (it.hasNext()) { // 遍歷Map集合
String str = (String) it.next();
String name = (String) map.get(str);
System.out.println(str + " " + name);
}
System.out.println( );
TreeMap<String, String> treemap = new TreeMap<>(); // 創(chuàng)建TreeMap集合對(duì)象
treemap.putAll(map); // 向集合添加對(duì)象
Iterator<String> iter = treemap.keySet().iterator();
System.out.println("TreeMap類實(shí)現(xiàn)的Map集合铃在,鍵對(duì)象升序:");
while (iter.hasNext()) { // 遍歷TreeMap集合對(duì)象
String str = (String) iter.next(); // 獲取集合中的所有key對(duì)象
String name = (String) treemap.get(str); // 獲取集合中的所有values值
System.out.println(str + " " + name);
}
}
}
輸出結(jié)果:
HashMap類實(shí)現(xiàn)的Map集合阵具,無(wú)序:
341 黃七
125 趙六
512 李四
853 王一
351 張三
TreeMap類實(shí)現(xiàn)的Map集合,鍵對(duì)象升序:
125 趙六
341 黃七
351 張三
512 李四
853 王一
6. 實(shí)踐練習(xí)題
- 將1~100之間的所有正整數(shù)存放在一個(gè)List集合中定铜,并將集合中索引位置是10的對(duì)象從集合中移除阳液。
import java.util.*;
public class Text {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
for(int i = 1 ;i<=100;i++){
list.add(new Integer(i));
}
list.remove(list.get(10));
System.out.println("ok");
}
}
輸出結(jié)果:
ok
- 分別向Set集合以及List集合中添加"A” “a” "c” "C” "a”5個(gè)元素,觀察重復(fù)值"a”能否
重復(fù)地在List集合以及Set集合中添加揣炕。
import java.util.*;
public class Text {
public static void main(String[] args) {
Set<String> set = new HashSet<>(); //HashSet是Set的子接口
set.add("a");
set.add("c");
set.add("A");
set.add("a");
set.add("C");
List<String> list = new ArrayList<>();
list.add("a");
list.add("c");
list.add("A");
list.add("a");
list.add("C");
System.out.println(set);
System.out.println(list);
}
}
輸出結(jié)果:
[a, A, c, C]
[a, c, A, a, C]
- 創(chuàng)建Map集合帘皿,創(chuàng)建Emp對(duì)象,并將Emp對(duì)象添加到集合中(Emp對(duì)象的id作為Map集合的鍵)畸陡,并將id為“015”的對(duì)象從集合中移除鹰溜。
首先是Emp.java:
public class Emp {
private String e_id;
private String e_name;
public Emp( String e_id,String e_name) {
this.e_id = e_id;
this.e_name = e_name;
}
public String getE_id() {
return e_id;
}
public void setE_id(String e_id) {
this.e_id = e_id;
}
public String getE_name() {
return e_name;
}
public void setE_name(String e_name) {
this.e_name = e_name;
}
}
然后是主類:
import java.util.*;
public class Text {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<>();
Emp emp = new Emp("001", "張三");
Emp emp2 = new Emp("005", "李四");
Emp emp3 = new Emp("004", "王五");
Emp emp4 = new Emp("010", "趙六");
Emp emp5 = new Emp("015", "魏七");
map.put(emp.getE_id(), emp.getE_name());
map.put(emp2.getE_id(), emp2.getE_name());
map.put(emp3.getE_id(), emp3.getE_name());
map.put(emp4.getE_id(), emp4.getE_name());
map.put(emp5.getE_id(), emp5.getE_name());
map.remove("015");
for (String string : map.keySet()) {
System.out.println(map.get(string));
}
}
}
輸出結(jié)果:
張三
王五
李四
趙六
參考資料:《Java從入門到精通》