篇一:Java集合類(lèi)總結2
Java中集合類(lèi)用法總結
Collection
├List
│├LinkedList
│├ArrayList │└Vector
│ └Stack
└Set
├HashSet
└TreeSet
Map
├Hashtable
├HashMap
├WeakHashMap
└TreeMap
Map接口:
|
+ -- WeakHashMap: 以弱鍵 實(shí)現的基于哈希表的 Map。在 WeakHashMap 中,當某個(gè)鍵不再正常使用時(shí),將自動(dòng)移除其條目。更精確地說(shuō),對于一個(gè)給定的鍵,其映射的存在并不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,然后被回收。丟棄某個(gè)鍵時(shí),其條目從映射中有效地移除,因此,該類(lèi)的行為與其他的 Map 實(shí)現有所不同。此實(shí)現不是同步的。
|
+ -- TreeMap:該映射根據其鍵的自然順序進(jìn)行排序,或者根據創(chuàng )建映射時(shí)提供的 Comparator 進(jìn)行排序,具體取決于使用的構造方法。此實(shí)現不是同步的。 |
+ -- HashMap:基于哈希表的 Map 接口的實(shí)現。此實(shí)現提供所有可選的映射操作,并允許使用 null 值和 null 鍵。此類(lèi)不保證映射的順序,特別是它不保證該順序恒久不變。此實(shí)現不是同步的。
|
+-- Sorted Map: 進(jìn)一步提供關(guān)于鍵的總體排序 的 Map。該映射是根據其
鍵的自然順序進(jìn)行排序的,或者根據通常在創(chuàng )建有序映射時(shí)提供的 Comparator 進(jìn)行排序。對有序映射的 collection 視圖進(jìn)行迭代時(shí),此順序就會(huì )反映出來(lái)。要采用此排序方式,還需要提供一些其他操作。
Collection接口:
|
+ -- Set接口:一個(gè)不包含重復元素的 collection。更正式地說(shuō),set 不包含滿(mǎn)足 e1.equals(e2) 的元素對 e1 和 e2,并且最多包含一個(gè) null 元素。正如其名稱(chēng)所暗示的,此接口模仿了數學(xué)上的 set 抽象。
||
|+ -- HashSet:此類(lèi)實(shí)現 Set 接口,由哈希表支持。它不保證 set 的迭代順序;特別是它不保證該順序恒久不變。此類(lèi)允許使用 null 元素。此類(lèi)為基本操作提供了穩定性能,此實(shí)現不是同步的。
||
|+ -- LinkedHashSet:具有可預知迭代順序的 Set 接口的哈希表和鏈接列表實(shí)現。此實(shí)現與 HashSet 的不同之外在于,后者維護著(zhù)一個(gè)運行于所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,即按照將元素插入到 set中 的順序進(jìn)行迭代。注意,插入順序不 受在 set 中重新插入的 元素的影響。此實(shí)現不是同步的。
||
|+ -- TreeSet:基于 TreeMap 的 NavigableSet 實(shí)現。使用元素的自然順序對元素進(jìn)行排序,或者根據創(chuàng )建 set 時(shí)提供的 Comparator 進(jìn)行排序,具體取決于使用的構造方法。此實(shí)現為基本操作提供受保證的 log(n) 時(shí)間開(kāi)銷(xiāo)。此實(shí)現不是同步的。
|
+ -- List接口:有序的 collection。此接口的用戶(hù)可以對列表中每個(gè)元素的插入位置進(jìn)行精確地控制。用戶(hù)可以根據元素的整數索引訪(fǎng)問(wèn)元素,并搜索列表中的元素。
|
+ -- ArrayList:List 接口的大小可變數組的實(shí)現。實(shí)現了所有可選列表操作,并允許包括 null 在內的所有元素。除了實(shí)現 List 接口外,此類(lèi)還提供一些方法來(lái)操作內部用來(lái)存儲列表的數組的大小。每個(gè) ArrayList 實(shí)例都有一個(gè)容量。該容量是指用來(lái)存儲列表元素的數組的大小。它總是至少等于列表的大小。隨著(zhù)向
ArrayList 中不斷添加元素,其容量也自動(dòng)增長(cháng)。并未指定增長(cháng)策略的細節,因為這不只是添加元素會(huì )帶來(lái)分攤固定時(shí)間開(kāi)銷(xiāo)那樣簡(jiǎn)單。此實(shí)現不是同步的。|
+ -- LinkedList:List 接口的鏈接列表實(shí)現。實(shí)現所有可選的列表操作,并且允許所有元素。除了實(shí)現 List 接口外,LinkedList 類(lèi)還為在列表的開(kāi)頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。這些操作允許將鏈接列表用作堆棧、隊列或雙端隊列。提供先進(jìn)先出隊列操作(FIFO)。此實(shí)現不是同步的。
|
+ -- Vector:Vector 類(lèi)可以實(shí)現可增長(cháng)的對象數組。與數組一樣,它包含可以使用整數索引進(jìn)行訪(fǎng)問(wèn)的組件。但是 ,Vector 的大小可以根據需要增大或縮小,以適應創(chuàng )建 Vector 后進(jìn)行添加或移除項的操作。此實(shí)現是同步的.
1. Collection的功能
下面這張表給出了Collection的所有功能,也就是你能用Set和List做什么事。Map不是繼承Collection的,所以我們會(huì )區別對待。
boolean add(Object):確保容器能持有你傳給它的那個(gè)參數。如果沒(méi)有把它加進(jìn)去,就返回false。 boolean addAll(Collection):加入參數Collection所含的所有元素。只要加了元素,就返回true。
void clear():清除容器所保存的所有元素。
boolean contains(Object):如果容器持有參數Object,就返回true。 boolean containsAll(Collection):如果容器持有參數Collection所含的全部元素,就返回true。
boolean isEmpty():如果容器里面沒(méi)有保存任何元素,就返回true。
Iterator iterator():返回一個(gè)可以在容器的各元素之間移動(dòng)的Iterator。 boolean removeAll(Collection):刪除容器里面所有參數Collection所包含的元素。只要刪過(guò)東西,就返回true。
boolean retainAll(Collection):只保存參數Collection所包括的元素。如果發(fā)生過(guò)變化,則返回true。 int size():返回容器所含元素的數量。
Object toArray():返回一個(gè)包含容器中所有元素的數組。
Object toArray(Object a):返回一個(gè)包含容器中所有元素的數組,且
這個(gè)數組不是普通的Object數組,它的類(lèi)型應該同參數數組a的類(lèi)型相同。
注意,這里沒(méi)有能進(jìn)行隨機訪(fǎng)問(wèn)的get()方法。這是因為Collection還包括Set。而Set有它自己的內部順序。所以如果你要檢查Collection的元素,你就必須使用迭代器。
2.List的功能
List的基本用法事相當將但的。雖然絕大多數時(shí)候,你只是用add()加對象,用get()取對象,用iterator()獲取這個(gè)序列的Iterator,但List還有一些別的很有用的方法。
實(shí)際上有兩種List:擅長(cháng)對元素進(jìn)行隨機訪(fǎng)問(wèn)的,較常用的ArrayList,和更強大的LinkedList。LinkedList不是為快速的隨機訪(fǎng)問(wèn)而的,但是它卻有一組更加通用的方法。
Lisk:List的最重要的特征就是有序;它會(huì )確保以一定的順序保存元素。List在Collection的基礎上添加了大量方法,使之能在序列中間插入和刪除元素。List可以制造ListIterator對象,你除了能用它在List的中間插入和刪除元素之外,還能用它沿兩個(gè)方法遍歷List。
ArrayList*:一個(gè)用數組實(shí)現的List。能進(jìn)行快速的隨機訪(fǎng)問(wèn),但是往列表中間插入和刪除元素的時(shí)候比較慢。ListIterator只能用在反向遍歷ArrayList的場(chǎng)合,不要用它來(lái)插入和刪除元素,因為相比LinkedList,在A(yíng)rrayList里面用ListIterator的系統開(kāi)銷(xiāo)比較高。
LinkedList:對順序訪(fǎng)問(wèn)進(jìn)行了優(yōu)化。在List中間插入和刪除元素的代價(jià)也不高。隨機訪(fǎng)問(wèn)的速度相對較慢。此外它還有addFirst(),addLast(),getFirst(),getLast(),removeFirst()和removeLast()等方法,你能把它當成棧,隊列或雙向隊列來(lái)用。
記住,容器只是一個(gè)存儲對象的盒子。如果這個(gè)笑盒子能幫你解決所有的問(wèn)題,那你就用不著(zhù)取管它事怎么實(shí)現的。如果開(kāi)發(fā)環(huán)境里面還有一些別的,會(huì )造成固定的性能開(kāi)銷(xiāo)的因素存在,那么ArrayList和LinkedList之間的性能差別就會(huì )變得不那么重要了。你只需要它們中的一個(gè),你甚至可以想象有這樣一種“完美”的抽象容器;它能根據用途,自動(dòng)地切換其底層的實(shí)現。
用LinkedList做一個(gè)棧
“?!庇袝r(shí)也被稱(chēng)為“后進(jìn)先出”的容器。就是說(shuō),最后一個(gè)被“壓”進(jìn)棧中的東西,會(huì )第一個(gè)“彈”出來(lái)。同其他Java容器一樣,壓進(jìn)去和彈出來(lái)的東西都是Object,所以除非你只用Object的功能,否則就必須對彈起來(lái)的東西進(jìn)行類(lèi)型轉換。
LinkedList的方法能直接實(shí)現棧的功能,所以你完全可以不寫(xiě)Stack而直接使用LinkedList。
如果你只想要棧的功能,那么繼承就不太合適了,因為繼承出來(lái)的是一個(gè)擁有LinkedList的所有方法的類(lèi)。
用LinkedList做一個(gè)隊列
隊列是一個(gè)“先進(jìn)先出”容器。也就是,你把一端把東西放進(jìn)去,從另一端把東西取出來(lái)。所以你放東西的順序也就是取東西的順序。LinkedList有支持隊列的功能的方法,所以它也能被當作Queue來(lái)用。
還能很輕易地用LinkedList做一個(gè)deque。它很像隊列,只是你可以從任意一端添加和刪除元素。
Vector類(lèi)
Vector非常類(lèi)似ArrayList,但是Vector是同步的。由Vector創(chuàng )建的
Iterator,雖然和ArrayList創(chuàng )建的Iterator是同一接口,但是,因為Vector是同步的,當一個(gè)Iterator被創(chuàng )建而且正在被使用,另一個(gè)線(xiàn)程改變了Vector的狀態(tài),這時(shí)調用Iterator的方法時(shí)將拋出ConcurrentModificationException,因此必須捕獲該異常。
Stack 類(lèi)
Stack繼承自Vector,實(shí)現一個(gè)后進(jìn)先出的堆棧。Stack提供5個(gè)額外的方法使得Vector得以被當作堆棧使用?;镜膒ush和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個(gè)元素在堆棧中的位置。Stack剛創(chuàng )建后是空棧。
3.Set的功能
Set的接口就是Collection的,所以不像那兩個(gè)List,它沒(méi)有額外的功能。實(shí)際上Set確確實(shí)實(shí)就是一個(gè)Collection--只不過(guò)行為方式不同罷了。Set會(huì )拒絕持有多個(gè)具有相同值的對象的實(shí)例。
Set:加入Set的每個(gè)元素必須是唯一的;否則,Set是不會(huì )把它加進(jìn)
篇二:【java】集合框架
【java總結】集合框架
Collection是集合框架層次結構中的根接口。Collection 表示一組對象,這些對象也稱(chēng)為 collection 的元素。一些 collection 允許有重復的元素,而另一些則不允許。一些 collection 是有序的,而另一些則是無(wú)序的。Collection接口下有最常用的接口為L(cháng)ist跟Set。需要注意的是,Map并沒(méi)有實(shí)現Collection接口。
List接口實(shí)現類(lèi)ArrayList
優(yōu)點(diǎn):類(lèi)似數組的形式進(jìn)行存儲,因此它的隨機訪(fǎng)問(wèn)速度極快。
缺點(diǎn):不適合于在線(xiàn)性表中間需要頻繁進(jìn)行插入和刪除操作。因為每次插入和刪除都需要移動(dòng)數組中的元素,它是用數組存儲元素的,這個(gè)數組可以動(dòng)態(tài)創(chuàng )建,如果元素個(gè)數超過(guò)了數組的容量,那么就創(chuàng )建一個(gè)更大的新數組,并將當前數組中的所有元素都復制到新數組中。
view plain copy
span style=font-size:14px;public class ArrayListTest {
public static void main(String args){
ListString arrayList=new ArrayListString();
arrayList.add(Welcome);
arrayList.add(to);
arrayList.add(java);
//把ArrayList變?yōu)閿到M相關(guān)的內容進(jìn)行遍歷
String strArray=new String;
arrayList.toArray(strArray);
for(int i=0;istrArray.length;i++)System.out.println(strArray);
//使用迭代器進(jìn)行ArrayList遍歷
IteratorString iter=arrayList.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}/span
List接口實(shí)現類(lèi)LinkedList
優(yōu)點(diǎn):適合于在鏈表中間需要頻繁進(jìn)行插入和刪除操作。
缺點(diǎn): 隨機訪(fǎng)問(wèn)速度較慢。查找一個(gè)元素需要從頭開(kāi)始一個(gè)一個(gè)的找。此類(lèi)實(shí)現 Deque 接口,為 add、poll 提供先進(jìn)先出隊列操作,以及其他堆棧和雙端隊列操作LinkedList是在一個(gè)鏈表中存儲元素。
view plain copy
span style=font-size:14px;public class LinkedListTest {
public static void main(String args){
ListString linkedList=new LinkedListString();
//使用ForEach遍歷linkedList
String strArray2=new String;
linkedList.toArray(strArray2);
for(int i=0;istrArray2.length;i++)System.out.println(strArray2);
//foreach遍歷LinkedList
for(String str:linkedList){
System.out.println(str);
}
//使用迭代器進(jìn)行ArrayList遍歷
IteratorString iter=linkedList.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}/span
List接口實(shí)現類(lèi)Vector:
Vector使用了關(guān)鍵字synchronized將訪(fǎng)問(wèn)和修改向量的方法都變成同步的了,所以對于不需要同步的應用程序來(lái)說(shuō),類(lèi)ArrayList比類(lèi)Vector更高效。
相同點(diǎn):
①都繼承于A(yíng)bstractList,并且實(shí)現List接口
②都實(shí)現了RandomAccess和Cloneable接口
③都是通過(guò)數組實(shí)現的,本質(zhì)上都是動(dòng)態(tài)數組,默認數組容量是10
④都支持Iterator和listIterator遍歷
不同點(diǎn):
①ArrayList是非線(xiàn)程安全,而Vector是線(xiàn)程安全的
②容量增加方式不同,Vector默認增長(cháng)為原來(lái)一倍,而ArrayList卻是原來(lái)的一半+1 ③Vector支持通過(guò)Enumeration去遍歷,而List不支持
view plain copy
span style=font-size:14px;public class VectorTest {
public static void main(String args){
VectorInteger vector = new VectorInteger();
for(int i = 0; i 10; i++){
vector.add(i);
}
//直接打印
System.out.println(vector.toString());
//size()
System.out.println(vector.size());
//contains
System.out.println(vector.contains(2));
//總結:對比Vector的遍歷方式,使用索引的隨機訪(fǎng)問(wèn)方式最快,使用迭代器最慢 //iterator遍歷
IteratorInteger iterator = vector.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next() + );
}
//Enumeration遍歷
Enumeration enu = vector.elements();
while (enu.hasMoreElements()) {
System.out.println((Integer)enu.nextElement());
}
//toArray
Object objArr = vector.toArray();
System.out.println(\nobjArr: + Arrays.asList(objArr));
Integer intArr = vector.toArray(new Integer);
System.out.println(intArr: + Arrays.asList(intArr));
//add
vector.add(5);
//remove
vector.remove(5);
System.out.println(vector);
//containsAll
System.out.println(vector.containsAll(Arrays.asList(5,6)));
//addAll
vector.addAll(Arrays.asList(555,666));
System.out.println(vector);
//removeAll
vector.removeAll(Arrays.asList(555,666));
System.out.println(vector);
//addAll方法
vector.addAll(5, Arrays.asList(666,666, 6));
System.out.println(vector);
//get方法
System.out.println(vector.get(5));
//set方法
vector.set(5, 55);
System.out.println(vector.get(5));
//add方法
vector.add(0, 555);
System.out.println(vector);
//remove方法
vector.remove(0);
System.out.println(vector);
//indexof方法
System.out.println(vector.indexOf(6));
//lastIndexOf方法
System.out.println(vector.lastIndexOf(6));
//listIterator方法
ListIteratorInteger listIterator = vector.listIterator();
System.out.println(listIterator.hasPrevious());
//listIterator(index)方法
ListIteratorInteger iListIterator = vector.listIterator(5);
System.out.println(iListIterator.previous());
//subList方法
System.out.println(vector.subList(5, 7));
//clear
vector.clear();
System.out.println(vector);
}
}/span
List接口實(shí)現類(lèi)Stack
棧類(lèi),是Java2之前引入的,繼承自類(lèi)Vector。同樣是線(xiàn)程同步的
view plain copy
span style=font-size:14px;public class StackTest {
public static void main(String args){
StackInteger stack = new StackInteger();
for(int i = 0; i 10; i++){
stack.add(i);
}
System.out.println(stack);
System.out.println(stack.peek());
stack.push(555);
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack);
System.out.println(stack.empty());
System.out.println(stack.search(6));
System.out.println(stack遍歷:);
while(!stack.empty()){
System.out.print(stack.pop() + );
}
}
}/span
List接口總結:實(shí)際使用中我們需要根據特定的需求選用合適的類(lèi),如果 除了在末尾外不能在其他位置插入或者刪除元素,那么ArrayList效率更高,如果需要經(jīng)常插入或者刪除元素,就選擇LinkedList。
Set接口實(shí)現類(lèi)HashSet:
HashSet是Set接口最常見(jiàn)的實(shí)現類(lèi),其底層是基于hash算法進(jìn)行存儲相關(guān)元素的。HashSet中存儲元素的位置是固定的,并且是無(wú)序的。Set集合中的去重和hashCode與equals方法相關(guān)。
view plain copy
span style=font-size:14px;public class Num implements Comparable{
private int num;
public Num(int num){
this.num=num;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
Num x=(Num)o;
if(numx.num)return 1;
else if(num==x.num) return 0;
else return -1;
}
public String toString(){
return num=+num;
}
}/span
篇三:JAVA集合之Map映射深刻總結案例附上解釋跟總結
一.HashMap實(shí)例
案例1:HashMapDemo1
package Map映射;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/** Java集合系列之Map映射學(xué)習總結
* 順序結構
* 基于哈希表的 Map 接口的實(shí)現 。
* 鍵和值都允許是null,值可以重復。
* 無(wú)序的
* 線(xiàn)程不安全的。
* 遍歷無(wú)序輸出.
* 和Set集一樣,沒(méi)有for循環(huán)遍歷的方法。
* 遍歷Map方法有兩種:
* ①調用keySet方法:
*Set keys = map.keySet();
* Iterator it = keys.iterator();
* ②調用entrySet方法:
*Set keys = map.entrySet();
*Iterator it = keys.iterator();
* 本例子遍歷的是基本類(lèi)型
*
*/
public class HashMapDemo1 {
public static void main(String args) {
HashMap map = new HashMap();
map.put(1, 111);
map.put(1, 上海);
map.put(5, 廣州);
map.put(3, 西安);
map.put(null,武漢); //鍵允許是null
map.put(2, null);//值允許是null
map.put(null,null);//鍵和值都允許是null,會(huì )替換前面的null:武漢.
System.out.println(**********迭代器遍歷調用keySet方法*********);Set keys = map.keySet();//獲取所有的鍵,放入一個(gè)集合中
Iterator it = keys.iterator();//取得迭代器才可以遍歷
//遍歷出來(lái)的結果是無(wú)序的。
}
} while(it.hasNext()) { Object obj = it.next();//切記這個(gè)至少遍歷鍵,不是值。 System.out.println(obj+------+map.get(obj));//取得鍵對應的值 } System.out.println(**********迭代器遍歷調用entrySet方法*********); Set set1=map.entrySet(); Iterator iterator1=set1.iterator(); while (iterator1.hasNext()) { Map.Entry object = (Map.Entry) iterator1.next(); System.out.println(object.getKey()+------+object.getValue()); }
案例2:HashMapDemo2
package Map映射;
import java.util.*;
public class HashMapDemo2 {
@SuppressWarnings(rawtypes) public static void main(String args){ HashMapComparable, Comparable map=new HashMapComparable, HashMapInteger,Person2 map1=new HashMapInteger,Person2(); Person2 p1=new Person2(李川,111,80); Person2 p2=new Person2(李您,111,80); Comparable();//一個(gè)鍵對應一個(gè)值,而且鍵不能重復,會(huì )被覆蓋 Person2 p3=new Person2(林是,111,80); map1.put(1, p1); map1.put(2, p2); map1.put(3, p3);map.put(1, 110); map.put(2, 220); map.put(城市,福建); map.put(null, null); System.out.println(***********用keySet方法遍歷*********); Set keys=map.keySet();//取得鍵值,取得map所有的鍵值,存入set集合中 Iterator iterator=keys.iterator();//利用鍵值取得value值while(iterator.hasNext()){ Object object=iterator.next(); System.out.println(object+-------+map.get(object));//輸出是無(wú)序的 }
System.out.println(***********用entrySet方法遍歷*********); SetMap.EntryInteger,Person2 keys1=map1.entrySet();//查找文檔,發(fā)現map1調用entrySet方法返回的的是SetMap.EntryK,V,所以要用相應的接收。Map.EntryInteger,Person2可寫(xiě)或不寫(xiě)
IteratorMap.EntryInteger,Person2 iterator1=keys1.iterator(); //while(iterator1.hasNext()){ Map.EntryInteger,Person2 entry = (Map.EntryInteger,Person2) // entry.getValue();表示取得該鍵對應的值,這個(gè)值要是基本類(lèi)型的話(huà),那就 System.out.println((entry.getKey()+-------+姓名:得到一個(gè)Set的迭代器,在后面的遍歷中使用。SetMap.EntryK,V可寫(xiě)可不寫(xiě)。 iterator1.next(); 直接輸出,要是引用類(lèi)型的話(huà),還需要調用方法取得相應的值
+(entry.getValue()).getname()+學(xué)號:+(entry.getValue()).getno()+分數:+(entry.getValue()).getscore()));//輸出是無(wú)序的
}
class Person2{
String name; int no; int score; public Person2(String name,int no,int score){ this.name=name; this.no=no; this.score=score;} } } public void setname(String name){ this.name=name; } public void setno(int no){ this.no=no; } public void setscore(int score){ this.score=score; } public String getname(){ return name; } public int getno(){ return no; } public int getscore(){
} }
案例3:HashMapDemo3
package Map映射;
/**
*總結:HashMap用entrySet()方法遍歷用法:
*①SetMap.EntryInteger, Object keys = map3.entrySet();也是先取得集合中的(鍵-值)映射關(guān)系,放入keys集合中
*②IteratorMap.EntryInteger, Object iterator = keys.iterator();取得迭代器,用來(lái)遍歷(鍵-值)映射關(guān)系的集合.
*③iterator.hasNext();判斷是否有鍵
*④Map.EntryInteger,Object entry = iterator.next();遍歷第一個(gè)(鍵-值)映射關(guān)系,請注意,Map.entrySet 方法返回映射的 collection 視圖,用Map.Entry接收。
*這樣就可以通過(guò)調用entry.getKey()和entry.getValue()這兩個(gè)方法取得(鍵-值)映射關(guān)系中對應的值了。
*注意了,對于entry.getValue(),若是基本數據怎么不需要改變,若是引用類(lèi)型: *Person3 p=(Person3) entry.getValue();
*System.out.println(entry.getKey()+----+pp.getname());
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapDemo3 {
public static void main(String args){
HashMapInteger, Object map3=new HashMapInteger,Object();
Person3 p1=new Person3(李川,111,80); Person3 p2=new Person3(李川,111,80); Person3 p3=new Person3(李川,111,80); map3.put(1,11); map3.put(2, 110); map3.put(3, 220); map3.put(6, p1); map3.put(4,福建); map3.put(5, a); map3.put(null, null); map3.put(7, p2); map3.put(8, p3); map3.remove(6); SetMap.EntryInteger, Object keys = map3.entrySet();
IteratorMap.EntryInteger, Object iterator = keys.iterator();
while (iterator.hasNext()) {
Map.EntryInteger,Object entry = iterator.next();
if(entry.getValue() instanceof Person3){//entry.getValue()這是表示值,但是對應的是引用類(lèi)型對象
Person3 pp=(Person3) entry.getValue();
System.out.println(entry.getKey()+----+pp.getname());
}
else {
System.out.println(entry.getKey()+----+entry.getValue());
}
}
}
}
class Person3{
String name;
int no;
int score;
public Person3(String name,int no,int score){
this.name=name;
this.no=no;
this.score=score;
}
public void setname(String name){
this.name=name;
}
public void setno(int no){
this.no=no;
}
public void setscore(int score){
this.score=score;
}
public String getname(){
return name;
}
public int getno(){
return no;
}
public int getscore(){
return score;
}