疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

MAP接口及实现类笔记总结


 

 
Map :存储的是键值对,一对一对出现的,要保证键的唯一性.
 
Map常见的三个子类.
1.HashTable 底层是哈希表结构,不能存在null的情况.该集合是线程同步的.效率低
此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
 
2.HashMap 底层是哈希表数据结构,允许null值和null键,该集合不同步. 效率高
 
3.TreeMap 底层是二叉树结构, 线程不同步,具备排序的特点.可以给Map集合中的键排序.
与Set很像,Set集合的底层就是使用了Map集合方法.
 
Map其共性方法有:
 
1.添加
  put()
  putAll()
2.删除
  clear();
  remove();
3.判断
  containsValue(Object value)
  containsKey(Object key)
  isEmpty();
4.获取
  get();
  size();
  values();
 
基本共性方法代码演示:
 
复制代码
import java.util.*;
class MapDemo
{
    public static void main(String [] args)
    {
        Map<String,String> map = new HashMap<String,String>();  //Hash无序的.
        
        //添加元素,添加了相同的键,后添加的值会将原先的键对应的值替换掉.put方法会返回原先被覆盖的值.
        
        sop("Put :"+map.put("01","zhangsan01"));
        sop("Put :"+map.put("01","wangwu"));
        map.put("02","zhangsan02");
        map.put("03","zhangsan03");
        
        //判断是否包含
        sop("containsKey : zhangsan01 "+"------"+map.containsKey("01"));
        //sop("remove : "+map.remove("03"));  //找寻键,并打印出其对应的值: zhangsan03
        
        //获取
        sop("get : "+map.get("02"));
         
        map.put("04",null);  
        sop("get : "+map.get("04"));
        //可以通过个get方法的返回值来判断一个 键 是否存在. 通过返回null来判断.
        
        //获取Map集合中的所有值
        Collection<String> coll =  map.values();
        sop(coll);
        
        sop(map);
    }
 
    public static void sop(Object obj)
    {
        System.out.println(obj);    
    }
    
}
复制代码
 
Map的重点方法:
  entrySet()
  KeySet()
这两种方法就是Map集合取出元素的方式:
 
Map集合两种取出方式:
 
 
1.Set<k> keySet 
将Map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键.
在根据get方法,获取每个键所对应的值.
 
Map集合取出原理:转成Set集合.在通过迭代器取出.
 
 
2.Set<Map.Entry<k,v>> entrySet
 
将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry
 
其中Entry其实是一个内部接口.定义在map接口里面
 
格式如下:
interface Map
{
  public static interface Entry
  {
    public static void getValue();
    public static void getKey();
  }
 
}
 
class HashMap implements Map
{
  class Hash implements Map.Entry
  {
    public Object getValue(){};
    public Object getKey(){};
  }
}
 
 
两种取出方式的代码演练:
 
复制代码
/*
 
Map集合两种取出方式:
    1.Set<k> keySet 
            将map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键.
            在根据get方法,获取每个键锁对应的值.
            
            Map集合取出原理:转成Set集合.在通过迭代器取出.
            
            
    2.Set<Map.Entry<k,v>>  entrySet ,将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry
    
    Entry其实是一个内部接口.定义在map接口里面
    interface Map
    {
        public static interface  Entry
        {
            public static void getValue();
            public static void getKey();
        }
        
    }
    
    class HashMap implements Map
    {
        class Hash implements Map.Entry
        {
            public Object getValue(){};
            public Object getKey(){};
        }
    }
    
*/
 
import java.util.*;
class MapDemo2
{
    public static void main(String [] args)
    {
        Map<String,String> map = new HashMap<String,String>();  
        
        map.put("01","zhangsan01");
        map.put("02","zhangsan02");
        map.put("03","zhangsan03");
        map.put("04","zhangsan04");
        
        //将map集合中的 映射关系 取出.
        
        Set<Map.Entry<String,String>> mapEntry = map.entrySet();
        
        Iterator<Map.Entry<String,String>> it = mapEntry.iterator();
        
        while(it.hasNext())
        {
            Map.Entry<String,String> me = it.next();
            
            String key = me.getKey();
            String value = me.getValue();
            sop("Key :"+key+"Value :"+value);
        }
        
        
        
        /*
        
        //获取Map集合的所有键,并放在Set集合中. 获取方法: keySet();
        Set<String> keySet = map.keySet();
        
        //迭代取出所有的键.
        Iterator<String> it = keySet.iterator();
        
        while(it.hasNext())
        {
            String key = it.next();
            
            //有了键以后可以通过Map集合的get(key)方法获取其对应的值.
            String value = map.get(key);
            sop("Key :"+key+" Value :"+value);
        }
        
        */
        
    }
 
    public static void sop(Object obj)
    {
        System.out.println(obj);    
    }
    
}
复制代码
 
 
相关练习:
 
复制代码
/*
练习:
        
        每一个学生都有对应的归属地。
        键值对:    学生Student为键,地址类型String值。
        学生属性:姓名,年龄。
        注意:姓名和年龄相同的视为同一个学生。
        保证学生的唯一性。
 
 
        1.描述学生。
 
        2.定义map容器。将学生作为键,地址作为值。存入。
 
        3.获取map集合中的元素。
 
 
*/
 
import java.util.*;
 
class MapTest
{
    public static void main(String [] args)
    {
        Map<Student,String> map = new HashMap<Student,String>();  
        
        map.put(new Student("zhangsan01",21),"beijing");
        map.put(new Student("zhangsan02",22),"shanghai");
        map.put(new Student("zhangsan03",23),"guangzhou");
        map.put(new Student("zhangsan04",24),"shenzhen");
    
        //第一种取出方式:keySet
        Set<Student> keySet = map.keySet();
        
        Iterator<Student> it = keySet.iterator();
        
        while(it.hasNext())
        {
            Student stu = it.next();
            
            String addr = map.get(stu);
            
            sop("第一种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", address : "+addr);
    
        }
        sop("-----------------------------------------");
        //第二种取出方式:entrySet
        
        Set<Map.Entry<Student,String>> entrySet = map.entrySet();
        
        Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();
        
        while(iter.hasNext())
        {
            Map.Entry<Student,String> me = iter.next();
            
            Student stu = me.getKey();
            
            String addr = me.getValue();
            
            sop("第二种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", adresss :"+addr);
        }              
        
    }
 
    public static void sop(Object obj)
    {
        System.out.println(obj);    
    }
    
}
 
class Student implements Comparable<Student>
{
    private String name;
    private int age;
    
    Student(String name,int age)
    {
        this.name = name;
        this.age = age;
    }
    
    public int compareTo(Student s)
    {
        if(!(s instanceof Student))
            throw new ClassCastException("类型匹配失败");
        
            int num = new Integer(this.age).compareTo(new Integer(s.age));
            if(num == 0)
            {
                return this.name.compareTo(s.name);
            }
        
        return num;
    }
        
    
    public int hashCode()
    {
        return name.hashCode()+age*17;
    }
    
    public boolean equals(Object obj)
    {
        if(!(obj instanceof Student))
            throw new ClassCastException("类型匹配失败");
        
        Student stu = (Student)obj;
        
        return this.getName().equals(stu.getName()) && this.age==stu.age;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
    
    public void setAge(int age)
    {
        this.age = age;
    }
    
    public String getName()
    {
        return name;
    }
    
    public  int getAge()
    {
        return age;
    }
    
}