A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© z13561291 中级黑马   /  2015-11-17 12:51  /  1178 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Map集合:该集合存储键值对,一对一对往里存,而且保证键的唯一性
        1.添加
        put(key,value)
        putAll(Map<? extends Key,? extends Value>n)
        2.删除
                remove(Object key)
                claer()
        3.判断
                containsValue(Object value)
                containsKey(Object value)
                isEmpty*(
        4.获取
                get(Object key)
                size()
                values()

                Set<Map.Entry<Key,Value>> entrySet()

                Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口

                interface Map
                {
                        public static interface Entry{
                                        public abstract Object getKey();
                                        public abstract Objext getValue();
                        }
                }
                class HashMap implements Map.Entry
                {
                        public abstract Object getKey(){}
                        public abstract Objext getValue(){}
                }


                Set<T> = 集合.keySet()  将Map中所有的键存入到Set集合,因为Set具备迭代器,
                                        所以可以迭代方式取出所有的键,在根据get方法,获取每个键所对应的值
                        Map集合的取出原理:将map集合转成set集合,通过迭代器取出
Map
  |--Hashtable:底层是哈希表数据结构,不可以存入null键为null值,是线程同步的
  |--HashMap:底层是哈希表数据结构,可以存入null键和null值,是线程不同步的
  |--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序

  和Set很像
  其实Set底层就是使用了Map集合
/*
每个学生都有对应的归属地
学生Student,地址String
学生属性:姓名,年龄
注意:姓名和年龄相同的视为同一学生
保证学生的唯一性。
*/
import java.util.*;
  1. class Student implements Comparable<Student>  //让学生类具备可比较性
  2. {
  3.         private String name;
  4.         private int age;
  5.         private String dizhi;
  6.         Student(String name,int age){
  7.                 this.name = name;
  8.                 this.age = age;
  9.                 }
  10.         public int compareTo(Student s){
  11.                 int num = new Integer(this.age).compareTo(new Integer(s.age));  //用Integer类型比较年龄大小,返回正,负,0
  12.                 if(num ==0)
  13.                         return this.name.compareTo(s.name);                         //比较name
  14.                 return num;
  15.         }
  16.         public int hashCode(){                                              //重写Code方法比较哈希值
  17.                 return name.hashCode()+age*34;
  18.         }
  19.         public boolean equals(Object obj){                                                                        //重写equals方法,按需求来比较
  20.                 if(!(obj instanceof Student))
  21.                          throw new ClassCastException("不是学生类型");              //当传入不是学生类时抛出数据类型不匹配异常
  22.                 Student s = (Student)obj;                                                                                //是学生类就强转
  23.                 return this.name.equals(s.name) && this.age == s.age; //返回比较后的值
  24.         }
  25.         public String getName(){
  26.                 return name;
  27.         }
  28.         public int getAge(){
  29.                 return age;
  30.         }
  31.         public String toString(){                                          //重写toString方法
  32.                 return name+"--"+age;
  33.         }


  34. }
  35. class  MapTest
  36. {
  37.         public static void main(String[] args)
  38.         {
  39.                 Map<Student,String> map = new HashMap<Student,String>();      //定义泛型 接收对象为Student类和String
  40.                 map.put(new Student("z3",20),"bj");
  41.                 map.put(new Student("z2",21),"bj1");
  42.                 map.put(new Student("z6",23),"bj3");
  43.                 map.put(new Student("z4",21),"bj6");
  44.                 map.put(new Student("z7",11),"bj1");
  45.                
  46.                 Set<Student> keyset = map.keySet();                                                          //第一种获取方法 用key值获取value值
  47.                         Iterator<Student> it = keyset.iterator();
  48.                                 while(it.hasNext())
  49.                                 {
  50.                                         Student s = it.next();
  51.                                         String addr = map.get(s);
  52.                                         System.out.println(s+"------"+addr);
  53.                                 }
  54.                
  55.                 Set<Map.Entry<Student,String>> entryset = map.entrySet();    //第二种获取方法  通过集合中的映射关系取出,Map.Entry类型
  56.                  Iterator<Map.Entry<Student,String>> ite = entryset.iterator();
  57.                         while(ite.hasNext()){
  58.                                 Map.Entry<Student,String> me = ite.next();
  59.                                 Student stu  = me.getKey();
  60.                                 String value = me.getValue();
  61.                                 System.out.println(stu+"---"+value);
  62.                         }
  63.                        
  64.         }
  65. }
复制代码




4 个回复

倒序浏览
第二种获取方法示意图

回复 使用道具 举报
第二种获取方法示意图。。。图片不会插入 抱歉
回复 使用道具 举报
又复习了一遍,感觉不错谢谢楼主分享
回复 使用道具 举报
谢谢分享!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马