Java Map類常用方法

來源:互聯網
上載者:User

標籤:遍曆   put   compareto   jdbc   sem   convert   key   static   對象   

關於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類常用方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.