Map接口之HashMap,LinkedHashMap,TreeMap

Map与Collection 并列存在,用于保存具有映射关系的数据:Key-Value

Map中的Key和Value都可以是任何引用类型的数据

Map中的Key用Set存放,不允许重复,即同一个Map对象所对应的类,须重写HashCode()和equals()方法

常用String类作为Map的 "键"

Key和vlaue之间存在单项一对一关系,即通过指定的Key总能找到唯一的,确定的value

TestMap

package com.aff.coll;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;

import org.junit.Test;

/*
 Collection接口
 
 Map接口
            |----HashMap:Map的主要实现类
            |----LinkedHashMap:使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
            |----TreeMap: 按照添加进Map中的元素的 key 的指定属性进行排序,要求key必须是同一个类对象
                                       自动排序 vs 定制排序
            |----Hashtable  :①古老的Map实现类,线程安全,不允许使用null作为key和value
                                        ②和HashMap一样不能保证其中key-value对的顺序 
                                        ③判断两个key相等,两个value相等的标准和HashMap一致     
                                        ④太古老,标识符的table还是小写的,不建议使用
                                |---- Properties :常用来处理属性文件。键和值都为String类型的
 */
public class TestMap {
    //使用Properties处理属性文件
    @Test
    public void testProperties() throws FileNotFoundException, IOException{
        Properties pros =  new Properties();
        pros.load(new FileInputStream(new File("jdbc.properties")));
        String user = pros.getProperty("user");
        System.out.println(user);//root;
        String password = pros.getProperty("password");
        System.out.println(password);//123ab;
    }
    
    
/*     Map常用方法:
        Object put(Objet key,Object value);  向Map中添加一个元素
         Object remove(Object key); 按照指定的key删除此key-value
         void putAll(Map t);
         void clear();  清空
         
         Object get(Object key);  获取指定key的value值,若无此key,则返回null
         
         boolean ontainsKey(Object key);
         boolean containsValue(Object value);
         int size();  返回集合的长度
         boolean isEmpty();
         boolean equals(Object obj);
         */
    
    
    //HashMap
/*    
    1.HashMap :key使用Set来存放的,不可重复,Value是用collection来存放的,
               可重复的一个key-value对,是一个Entry.所有的Entry是用Set存放的,也是不可重复的。
    2.向HashMap中添加元素时,会调用key所在的类的equals()方法,判断两个key是否相同,
      若相同,则只能添加进后添加的那个元素
     */
    @Test
    public void testHashMap() {
     Map map =  new HashMap();
     map.put("AA", 12);
     map.put("BB", 143);
     map.put("BB", 4656);
     map.put(123, "VV");
     map.put(null, null);
     System.out.println(map.size());//4
    }
    
    
    //遍历Map
    @Test
    public void testHashMap2() {
/*        
        如何遍历Map
        Set  KeySet();
        Collection values();
        Set entrySet();
        */
        Map map =  new HashMap();
        map.put("AA", 12);
        map.put("BB", 143);
        map.put(123, "VV");
        map.put(null, null);
        map.put(new Person("DD", 23), 46);
        
        //1.遍历key集
        Set set  = map.keySet();
        for(Object obj: set){
            System.out.println(obj);
        }
        System.out.println("----");
        //2.遍历value集
        Collection values = map.values();
        Iterator iterator = values.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
           }
         //3.遍历key-value对
        //方式一:
        Set set1  = map.keySet();
        for(Object obj : set1){
            //Object get(Object key);  获取指定key的value值,若无此key,则返回null
            System.out.println(obj+"----->"+map.get(obj));
        }
        System.out.println("------");
        
        //方式二:
        Set set2  = map.entrySet();
        for(Object obj:set2){
            Map.Entry  entry =  (Map.Entry)obj;
            System.out.println(entry.getKey()+"---->"+entry.getValue());
        }
     }
    
    
    //LinkedHashMap   使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的
    @Test
    public void testLinkedHashMap(){
        Map map = new LinkedHashMap();
        map.put("AA", 12);
        map.put("BB", 143);
        map.put(123, "VV");
        map.put(null, null);
        map.put(new Person("DD", 23), 46);
        System.out.println(map);
    }
    
    
    
    //TreeMap  的自然排序
    @Test
    public void testTreeMap(){
        Map map   = new TreeMap();
        map.put(new Person("AA", 23), 46);
        map.put(new Person("CC", 22), 68);
        map.put(new Person("GGG", 33), 26);
        map.put(new Person("BB", 14), 98);
        map.put(new Person("CC", 14), 98);
//        System.out.println(map);
        
         Set set1  = map.keySet();
        for(Object obj : set1){
            //Object get(Object key);  获取指定key的value值,若无此key,则返回null
            System.out.println(obj+"----->"+map.get(obj));
        }
    }
    
    
    
    //TreeMap  的定制排序
    @Test
    public void testTreeMap2(){ 
        Comparator com =  new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Customer && o2 instanceof Customer){
                    Customer c1 = (Customer)o1;
                    Customer c2 = (Customer)o2;
                    int i = c1.getId().compareTo(c2.getId());
                    if(i == 0){
                        return c1.getName().compareTo(c2.getName());
                    }
                    return i;
                }
                return 0;
            }
        };
        Map map   = new TreeMap();
        map.put(new Person("AA", 23), 46);
        map.put(new Person("CC", 22), 68);
        map.put(new Person("GGG", 33), 26);
        map.put(new Person("BB", 14), 98);
        map.put(new Person("CC", 14), 98);
       //    System.out.println(map); 
        
        Set set1  = map.keySet();
        for(Object obj : set1){
            //Object get(Object key);  获取指定key的value值,若无此key,则返回null
            System.out.println(obj+"----->"+map.get(obj));
        }
    }
}


jdbc.properties
user=root;
password=123ab;

Customer, Person与上篇相同

猜你喜欢

转载自www.cnblogs.com/afangfang/p/12590611.html