zoukankan      html  css  js  c++  java
  • Java Map类常用方法

    关于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
  • 相关阅读:
    【C#学习笔记】 IDisposable 接口
    【C#学习笔记】 List.AddRange 方法
    Request a certificate from a certificate vendor
    How to install your SSL Certificate to your Windows Server
    How to generate a CSR in Microsoft IIS 7
    我爱你 肖厦
    OAuth2.0协议之新浪微博接口演示
    重写mouseEvent 事件 怎么实现自定义的无边框窗口移动
    原文地址:Qt数据库总结 作者:ImmenseeT
    QT+MySQL图片插入数据库并显示 2013-03-12 13:58:52
  • 原文地址:https://www.cnblogs.com/naihuangbao/p/9444469.html
Copyright © 2011-2022 走看看