1. 程式人生 > >Java類集框架——Map介面使用注意事項

Java類集框架——Map介面使用注意事項

學習目標

掌握Map介面的輸出操作。 掌握Map介面中key類的定義標準。

Map介面輸出

對於Map介面來說,其本身是不能直接使用迭代(例如:Iterator、foreach)進行輸出的,因為Map中的每個位置存放的是一對值(key—>value),而Iterator中每次只能找到一個值。所以,如果此時非要使用迭代進行輸出的話,則必須按照以下的步驟完成(以Iterator輸出方法為例): 1、將Map的例項通過entrySet()方法方法變為Set介面物件。 2、通過Set介面例項為Iterator例項化。 3、通過Iterator迭代輸出,每個內容都是Map.Entry的物件。 4、通過Map.Entry進行key—>value的分離。
但是,在操作前必須說明的:Map介面一般只作為查詢使用,輸出的操作很少使用。
import java.util.HashMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
public class IteratorDemo04{
	public static void main(String args[]){
		Map<String,String> map = null; // 宣告Map物件,其中key和value的型別為String
		map = new HashMap<String,String>() ;
		map.put("name","liuxun") ;	// 增加內容
		map.put("age","100") ;	// 增加內容
		map.put("ID","12222222") ;	// 增加內容
		Set<Map.Entry<String,String>> allSet = null ;
		allSet = map.entrySet() ;
		Iterator<Map.Entry<String,String>> iter = null ;
		iter = allSet.iterator() ;
		while(iter.hasNext()){
			Map.Entry<String,String> me = iter.next() ;
			System.out.println(me.getKey() + " --> " + me.getValue()) ;
		}
	}
};

第一種方式:使用Iterator完成。當然,在JDK1.5之後也可以使用foreach完成。
import java.util.HashMap ;
import java.util.Map ;
import java.util.Set ;
import java.util.Iterator ;
public class ForeachDemo02{
	public static void main(String args[]){
		Map<String,String> map = null; // 宣告Map物件,其中key和value的型別為String
		map = new HashMap<String,String>() ;
		map.put("name","liuxun") ;	// 增加內容
		map.put("age","100") ;	// 增加內容
		map.put("ID","12222222") ;	// 增加內容
		for(Map.Entry<String,String> me:map.entrySet()){
			System.out.println(me.getKey() + " --> " + me.getValue()) ;
		}
	}
};
這兩種輸出形式實際上還是以Collection的形式輸出,只是以Map.Entry作為內容的操作型別。 在Map中,可以使用任意的型別作為key和value,也可以使用自定義的類。
import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年齡:" + this.age ;
	}
};
public class HashMapDemo05{
	public static void main(String args[]){
		Map<String,Person> map = null ;
		map = new HashMap<String,Person>() ;
		map.put("zhangsan",new Person("張三",30));	// 增加內容
		System.out.println(map.get("zhangsan")) ;
	}
};


如果現在以String為key是可以取出內容的。
import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年齡:" + this.age ;
	}
};
public class HashMapDemo06{
	public static void main(String args[]){
		Map<Person,String> map = null ;
		map = new HashMap<Person,String>() ;
		map.put(new Person("張三",30),"zhangsan");	// 增加內容
		System.out.println(map.get(new Person("張三",30))) ;
	}
};

發現將自定義的類作為key,但是在取值的時候發現取不了,返回的結果是null   實際上,對於匹配過程來講,有一個特點,即:物件要一樣才可以將內容查詢出來。
import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年齡:" + this.age ;
	}
};
public class HashMapDemo07{
	public static void main(String args[]){
		Map<Person,String> map = null ;
		map = new HashMap<Person,String>() ;
		Person per = new Person("張三",30) ;
		map.put(per,"zhangsan");	// 增加內容
		System.out.println(map.get(per)) ;
	}
};

可是這樣並不是解決問題的方法,因為不可能將Person的per物件到處帶著走,應該像String一樣,可以使用匿名物件的形式找到內容。實際上就需要按照與Set介面中判斷重複的元素一樣,進行方法的覆寫。

注意事項二:直接使用非系統類作為key

如果要使用非系統類作為Map的key,則此類必須覆寫Object類中的以下兩個方法: hashCode() equals()
import java.util.Map ;
import java.util.HashMap ;
class Person{
	private String name ;
	private int age ;
	public Person(String name,int age){
		this.name = name ;
		this.age = age ;
	}
	public String toString(){
		return "姓名:" + this.name + ";年齡:" + this.age ;
	}
	public boolean equals(Object obj){
		if(this==obj){
			return true ;
		}
		if(!(obj instanceof Person)){
			return false ;
		}
		Person p = (Person)obj ;
		if(this.name.equals(p.name)&&this.age==p.age){
			return true ;
		}else{
			return false ;
		}
	}
	public int hashCode(){
		return this.name.hashCode() * this.age ;
	}
};
public class HashMapDemo08{
	public static void main(String args[]){
		Map<Person,String> map = null ;
		map = new HashMap<Person,String>() ;
		map.put(new Person("張三",30),"zhangsan");	// 增加內容
		System.out.println(map.get(new Person("張三",30))) ;
	}
};


總結: 1、Map可以使用迭代輸出     Map—>entrySet()—>Set—>Iterator—>Map.Entry—>key和value 2、如果使用非系統的類作為key,則一定保證覆寫equals和hashCode方法,否則無效。

相關推薦

Java框架——Map介面使用注意事項

學習目標 掌握Map介面的輸出操作。 掌握Map介面中key類的定義標準。 Map介面輸出 對於Map介面來說,其本身是不能直接使用迭代(例如:Iterator、foreach)進行輸出的,因為Map

Java框架(五):偶物件儲存:Map介面

Map集合可以儲存一對關聯資料(按照“key = value”的形式)。 Map介面的常用方法 方法 型別 描述 public V put(K key, V value) 普通

Java框架(三):Set子介面

Set子介面只是簡單地繼承了Collection介面,並沒有擴充其他的方法。Set集合中不允許儲存重複的資料。在Set介面下有兩個常用的子類:HashSet、TreeSet。HashSet是雜湊存放資料,而TreeSet是有序存放的子類,預設按照字母的升序排列。在實際開發中如果沒有排序要求,

Java框架(二):List子介面

List子介面最大的功能是裡面儲存的資料可以存在重複的內容。List介面在對Collection介面擴充的方法如下: - public E get(int index):普通,取得索引編號的內容 - public E set(int index, E element):普通,修改指定索引

Java框架(一):簡介及Collection介面

簡介 在實際專案中,涉及到儲存多個物件的操作往往會用到陣列。然而傳統的陣列存在一個問題:長度是固定的。Java 2提供了一個專門實現資料結構的開發框架——類集框架,框架的程式介面和類都儲存在java.util包中,其最為核心的用處就在於實現了動態物件陣列的操作,定義了大量的操作標準,核心

Java框架——LinkedList子與Queue介面

學習目標: 掌握LinkedList與List介面的關係。 掌握Queue介面的作用。 LinkedList子類與Queue介面 LinkedList表示的是一個連結串列的操作類,此類的定義如下: p

0基礎學java_JavaMap介面

Map介面 Collection操作之前已經發現,每次儲存的物件都是一個物件。但是在Map中儲存的是一對物件,以keyàvalue的形式儲存。 Map介面常用子類: HashMap:無序存放的,是新的操作類,key不允許重複 HashTable: 無序存放的,是舊的操作類,key不允許重複 Tree

JAVA框架筆記(二)

三、集合的輸出     在類集中提供了以下4種常見的輸出方式 :          (1)Iterator : 迭代輸出,是使用最多的輸出方式          (2)

JAVA框架筆記(一)

一、基本概念 :         1、所謂類集就是一個動態的物件陣列,是對一些實現好的資料結構和演算法進行包裝,方便使用。而且類集框架本身不受物件陣列的長度限制。         2、為了實現類集容易擴充套件和修

Java框架(六):Stack及Properties子、Collections工具

Stack子類 在java.util包內可以利用stack類實現棧的功能。此類定義如下: public class Stack<E> extends Vector<E> Stack類常用方法: 方法 型別

Java框架(四):集合輸出

集合輸出的4種形式:Iterator輸出、ListIterator輸出、foreach(加強型for迴圈)輸出、Enumeration輸出。 迭代輸出:Iterator Iterator(迭代器)是集合輸出操作的一個介面,Collection介面中提供了直接為Iterator介面例項

Java基礎(五十九)-集合工具Java框架

1:Stack棧 棧是一種先進後出的資料結構。例如:在文字編輯器上都有撤銷功能,那麼每次使用的時候,最後一次的編輯操作永遠是最先撤銷的,那麼這個功能就是利用棧來實現的,棧的基本操作形式如下。 案例:實現棧的操作 import java.util.Stack;

Java基礎(六十)-Stream資料流(Java框架

Stream資料流 從JDK1.8開始,由於已經進入到了大資料的時代,所以在類集裡面也支援有資料的流式分析處理操作,為我們專門提供了一個Stream的介面,同時在Collection接口裡面也提供有為此介面例項化的方法。 import java.util.

Java基礎複習筆記--Iterator和ListIterator 迭代器的使用(遍歷集合) Java框架——Iterator和ListIterator 迭代器的使用(遍歷集合)

Java類集框架——Iterator和ListIterator 迭代器的使用(遍歷集合) 學習目標: 掌握集合輸出的標準操作。 掌握Iterator介面的主要作用及使用注意事項。 掌握ListIterator與Iterator介面的關係及區別。

Java框架——Iterator和ListIterator 迭代器的使用(遍歷集合)

學習目標: 掌握集合輸出的標準操作。 掌握Iterator介面的主要作用及使用注意事項。 掌握ListIterator與Iterator介面的關係及區別。 掌握ListIterator介面的使用限制。

JAVA 框架

</pre>什麼是類集框架<p></p><p><img src="https://img-blog.csdn.net/20150316092953342?watermark/2/text/aHR0cDovL2Jsb2c

Java框架

類集框架圖解: 前言: 資料結構對程式設計有著深遠的影響,在面向過程的c語言中,資料庫結構用struct來描述,而在面向物件的程式設計中,資料結構是用類來描述的,並且包含對該資料結構操作的方法。 在Java語言中,Java語言的設計者對常用的資料結構和

java中拼接sql的注意事項

作為一個初學java的人來說,不僅程式碼的規則要掌握,在編寫各個類的時候有一些小細節也是要注意的,比如在Service實現類中拼接sql的時候,一定要注意,sql語句的前後都要加空格,否則會報sql的錯誤。 例如: String hql = " select

“全棧2019”Java第一百零六章:匿名內部類與抽象介面注意事項

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第一百零六章:匿名內部類與抽象類介面注意事項 下一章 “全棧2019”Java第一百零七章:

java---Map介面

一,本章目標 掌握Map介面與Collection介面的不同 掌握Map與Map.Entry介面的關係 掌握Map常用的子介面:HashMap,HashTable,TreeMap,WeakHashMao 掌握HashMap與HashTable的區別 二,具體內容 Col