1. 程式人生 > >Java Map類常用方法

Java Map類常用方法

apple jdb 映射關系 所有 user while 字符串 關系 lan

關於Map集合中常用的方法:

void clear(); 清空Map

boolean containsKey(Object key); 判斷Map中是否包含這樣的key

boolean containsValue(Object value); 判斷Map中是否包含這樣的value

Set<Map.Entry<K,V>> entrySet(); 返回此映射中包含的映射關系的Set視圖

Object get(Object key); 通過key獲取value

boolean isEmpty(); 判斷該集合是否為空

Set keySet(); 獲取Map中所有的key

Object put(Object key,Object value); 向集合中添加鍵值對

Object remove(Object key); 通過key將鍵值刪除

int size(); 獲取Map中鍵值對的個數

Set keySet(); 獲取Map中所有的key

Collection values(); 獲取Map集合中所有的value

註意:存儲在Map集合key部分的元素需要同時重寫HashCode和equals方法(這個在之前的HashSet中講過)。Map的實現類又包括HashMap,Hashtable和TreeMap等,首先看看HashMap,結合以下代碼來看:

import java.util.*;
public class MapTest{
public static void main(String[] args){
//1.創建Map集合
Map persons = new HashMap(); //HashMap的默認初始化容量是16,加載因子是0.75
//2.存儲鍵值對
persons.put("10000","JACK");
persons.put("10000","TOM");
persons.put("10001","KING");
persons.put("10002","PIG");
persons.put("10003","LINDA");
persons.put("10004","KIDS");
//3.判斷鍵值對的個數
//Map中的key是無序不可重復的,和HashSet相同
System.out.println(persons.size()); //5
//4.判斷集合中是否包含這樣的key
System.out.println(persons.containsKey("10000")); //true
//5.判斷集合中是否包含這樣的value
System.out.println(persons.containsValue("JACK")); //false
//6.通過key獲取value
String k="10001";
Object v=persons.get(k);
System.out.println(v); //KING
//7.通過key刪除鍵值對
persons.remove("10002");
System.out.println(persons.size()); //4
//8.獲取所有的value
Collection values = persons.values();
Iterator it=values.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//9.獲取所有的key後遍歷
Set keys=persons.keySet();
Iterator it2=keys.iterator();
while(it2.hasNext()){
Object id=it2.next();
Object name=persons.get(id);
System.out.println(id+"-->"+name);
}
//10.entrySet() 將Map轉換成Set集合
Set entrySet=persons.entrySet();
Iterator it3=entrySet.iterator();
while(it3.hasNext()){
System.out.println(it3.next());
}
}
}

上述代碼中,

1.首先創建Map集合 persons,Map persons = new HashMap(); 這裏註意HashMap的默認初始化容量是16,加載因子是0.75.

2.Object put(Object key,Object value);向集合中添加鍵值對,並使用size();方法獲取Map中鍵值對的個數,這裏輸出鍵值對的個數為5,因為第一二個key重復,所以後面的鍵值對覆蓋前面的鍵值對。我們可以通過System.out.println(persons.containsValue("JACK"));來驗證,輸出false,也就是鍵值對"10000","TOM"覆蓋了鍵值對"10000","JACK"。

3.entrySet(); 將Map轉換成Set集合,與第9個方法差不多,但是鍵與值之間只能用等號,所以一般不推薦使用,一般使用第9個方法那樣的形式將Map轉換成Set集合。

接著來看Hashtable,主要講講它的子類型Properties,它們之間的繼承關系如下:

java.lang.Object

java.util.Dictionary<K,V>

java.util.Hashtable<Object,Object>

java.util.Properties

java.util.Properties;也是由key和value組成,但是key和value都是字符串類型。結合以下代碼來看看Properties的主要方法。

import java.util.Properties;
public class MapTest02{
public static void main(String[] args){
//1.創建屬性類對象
Properties p=new Properties();
//2.存
p.setProperty("driver","oracle.jdbc.driver.OracleDriver");
p.setProperty("username","scott");
p.setProperty("username","tom");
p.setProperty("password","tiger");
p.setProperty("url","jdbc:oracle:thin:@192.168.1.100:1521:bjpowernode");
//3.取
String v1=p.getProperty("driver");
String v2=p.getProperty("username");
String v3=p.getProperty("password");
String v4=p.getProperty("url");

System.out.println(v1);
System.out.println(v2);
System.out.println(v3);
System.out.println(v4);
}
}

編譯運行後輸出:

oracle.jdbc.driver.OracleDriver
tom
tiger
jdbc:oracle:thin:@192.168.1.100:1521:bjpowernode

上述代碼中,首先創建屬性類對象p,然後使用setProperty()方法將鍵值對存進去,取值的方法為getProperty("key");(key為存進去的對應的字符串)。當key相同時,與HashMap中的相同,後面的鍵值對會覆蓋前面的鍵值對。

最後來看TreeMap,TreeMap通過接口SortedMap實現。SortedMap中的key特點:無序不可重復,但是存進去的元素可以按照大小自動排序,之前講過Map類的集合之所以可以實現自動排序,是因為key部分的元素實現了Comparable接口或單獨寫了一個比較器。key部分元素實現Comparable接口的代碼如下:

import java.util.*;
public class SortedMapTest01{
public static void main(String[] args){
//Map,key存儲Product,value存儲重量
SortedMap products=new TreeMap();
//準備對象
Product p1=new Product("西瓜",1.0);
Product p2=new Product("桃子",4.0);
Product p3=new Product("蘋果",5.0);
Product p4=new Product("香蕉",2.0);
//添加
products.put(p1,8.0);
products.put(p2,3.0);
products.put(p3,4.0);
products.put(p4,10.0);
//遍歷
Set keys=products.keySet();
Iterator it=keys.iterator();
while(it.hasNext()){
Object k=it.next();
Object v=products.get(k);
System.out.println(k+"--->"+v+"kg");
}
}
}
class Product implements Comparable{
String name;
double price;
Product(String name,double price){
this.name=name;
this.price=price;
}
public String toString(){
return "Product[name="+name+",price="+price+"]";
}
public int compareTo(Object o){ //p1.compareTo(p2);
double price1=this.price;
double price2=((Product)o).price;
if(price1<price2){
return 1;
}else if(price1>price2){
return -1;
}else{
return 0;
}
}
}

編譯運行後輸出:

Product[name=蘋果,price=5.0]--->4.0kg
Product[name=桃子,price=4.0]--->3.0kg
Product[name=香蕉,price=2.0]--->10.0kg
Product[name=西瓜,price=1.0]--->8.0kg

key部分元素單獨寫比較器的代碼如下:

import java.util.*;
public class SortedMapTest02{
public static void main(String[] args){
SortedMap products=new TreeMap(new ProductPriceCompare());

Product p1=new Product("西瓜",2.0);
Product p2=new Product("香蕉",3.0);
Product p3=new Product("橘子",4.0);
Product p4=new Product("菠蘿",4.5);

products.put(p1,3.2);
products.put(p2,6.5);
products.put(p3,5.3);
products.put(p4,4.3);

Set keys=products.keySet();
Iterator it=keys.iterator();
while(it.hasNext()){
Object k=it.next();
Object v=products.get(k);
System.out.println(k+"--->"+v+"kg");
}
}
}
class Product{
String name;
double price;
Product(String name,double price){
this.name=name;
this.price=price;
}
public String toString(){
return "Product[name="+name+",price="+price+"]";
}
}
class ProductPriceCompare implements Comparator{
public int compare(Object o1,Object o2){
double price1=((Product)o1).price;
double price2=((Product)o2).price;
if(price1>price2){
return 1;
}else if(price1<price2){
return -1;
}else {
return 0;
}
}
}

編譯運行後輸出:

Product[name=西瓜,price=2.0]--->3.2kg
Product[name=香蕉,price=3.0]--->6.5kg
Product[name=橘子,price=4.0]--->5.3kg
Product[name=菠蘿,price=4.5]--->4.3kg

Java Map類常用方法