Map汇合
地图不能蕴含反复的键,每个键能够映射到最多一个值,是一个接口,HashMap保障键的唯一性
//创立汇合对象Map<String String> map = new HashMap<String String>(); //map里增加元素 V put(K key , V value)将指定的值与该映射中的指定关键词相关联map.put("itheima001","张曼玉");map.put("itheima002","王祖贤");map.put("itheima003","林青霞");sout(map);
HahMap重写了toString办法,把键和值用等号拼接起来,而后输入,键是惟一的,不能反复,当键反复的时候,咱们起初的值就会把以前的值笼罩掉
Map汇合的基本功能
//创立汇合对象Map<String String> map = new HashMap<String String>(); //map里增加元素 V put(K key , V value)map.put("张无忌","赵敏");map.put("郭靖","黄蓉");map.put("杨过","小龙女");//依据键删除键值对元素 V remove(Object key); 而后返回键值对对应的元素sout(map.remove(key:"郭靖"));//输入键值郭靖对应的元素黄蓉sout(map.remove(key:"郭襄"));//输入键值对郭襄对应的元素,发现没有键值郭襄,所以返回空元素null//革除所有键值对元素 void clearmap.clear();//判断汇合是否蕴含指定的键 boolean containsKey(Object key);sout(map.containsKey(key:"郭靖"));//判断汇合是否蕴含郭靖这个键,发现蕴含则返回true;sout(map.containsKey(key:"郭襄"));//判断汇合是否蕴含郭襄这个键,发现不蕴含就返回false;//判断汇合是否为空 boolean isEmptysout(map.isEmpty());//测试汇合长度 int size();sout(map.size());//输入汇合对象sout(map);
删除
清空
判断是否蕴含指定的键
判断汇合是否为空
测试汇合长度
Map汇合的获取性能
//依据键获取值V get(Object key);sout(map.get("张无忌"));sout(map.get("张三丰"));//如果说获取的键或者获取的键的元素在汇合中不存在就返回null,如果存在就返回键对应额值//获取所有键的汇合Set<K> keySet();Set<String> keySet = map.keySet();//加强for循环遍历for(String key : keySet){ sout(key);}///获取所有值的汇合Collection<V> values();Collection<String> values = map.values();//加强for循环遍历for(String value : values){ sout(value);}
依据键获取值
获取所有键的汇合
获取所有值的汇合
Map汇合的遍历
形式一
遍历键,通过键去找对应的值再输入
//获取所有键的汇合Set<K> keySet();Set<String> keySet = map.keySet();//加强for循环遍历每一个键for(String key : keySet){ //依据键去找值,用get办法实现 String value = map.get(key); sout(key +","+ value);}
输入后果
形式二
获取所有键值对对象的汇合,找到对象提取外面的键和值
//获取所有键值对对象的汇合Set<Map.Entry<String ,String>> entrySet();Set<Map.Entry<String ,String>> entrySet = map.entrySet();//后面是键,前面是值//遍历键值对对象的汇合,失去每一个键值对对象for(<map.Entry<String ,String> me : entrySet){ //依据键值对对象获取键和值 String key = me.getKey(); String value = me.getValue(); sout(key +","+ value);}
输入后果
案例 HashMap存储学生对象并遍历
学生类
创立HashMap汇合
//创立HashMap汇合对象 键是String类型,值是student类型HashMap<String,Student> hm = new HashMap<String,Student>();//创立学生对象Student s1 = mew Student(name:"林青霞",age:30);Student s2 = mew Student(name:"张曼玉",age:35);Student s3 = mew Student(name:"王祖贤",age:33);//将学生增加到汇合hm.put("itheima001",s1);hm.put("itheima002",s2);hm.put("itheima003",s3);//遍历//形式1 键找值Set<String> keySet = hm.keySet();//加强for循环遍历每一个键for(String key : keySet){ //依据键去找值,用get办法实现 Student value = hm.get(key); sout(key +","+ value.getName()+","+ value.getAge());}//形式2 遍历键值对对象找键和值Set<Map.Entry<String ,Student>> entrySet = hm.entrySet();//后面是键,前面是值for(<map.Entry<String ,Student> me : entrySet){ //依据键值对对象获取键和值 String key = me.getKey(); Student value = me.getValue(); sout(key +","+ value.getName()+","+ value.getAge());}
输入后果
案例 HashMap存储学生对象并遍历(和下面不一样)
保障键的唯一性,自定义保障唯一性,这次学生作为键存在,并且保障唯一性,因为键是惟一的,所以学生就惟一,
学生类
创立HashMap汇合
//创立HashMap汇合对象 键是student类型,值是String类型,HashMap<Student,String> hm = new HashMap<Student,String>();//创立学生对象Student s1 = mew Student(name:"林青霞",age:30);Student s2 = mew Student(name:"张曼玉",age:35);Student s3 = mew Student(name:"王祖贤",age:33);//将学生增加到汇合 值是地位hm.put(s1,"西安");hm.put(s2,"武汉");hm.put(s3,"郑州");//遍历//形式1 键找值Set<Student> keySet = hm.keySet();//加强for循环遍历每一个键for(Student key : keySet){ //依据键去找值,用get办法实现 String value = hm.get(key); sout(key.getName() +","+ key.getAge()+","+value);}
输入
如果我新建的两个对象成员内容是一样的,那么咱们认为是同一个对象,反复的元素,所以s4在增加的时候如果键是一样的,s4应该会笼罩掉s3的地位
//创立HashMap汇合对象 键是student类型,值是String类型,HashMap<Student,String> hm = new HashMap<Student,String>();//创立学生对象Student s1 = mew Student(name:"林青霞",age:30);Student s2 = mew Student(name:"张曼玉",age:35);Student s3 = mew Student(name:"王祖贤",age:33);Student s4 = mew Student(name:"王祖贤",age:33);//将学生增加到汇合 值是地位hm.put(s1,"西安");hm.put(s2,"武汉");hm.put(s3,"郑州");hm.put(s4,"北京");//遍历//形式1 键找值Set<Student> keySet = hm.keySet();//加强for循环遍历每一个键for(Student key : keySet){ //依据键去找值,用get办法实现 String value = hm.get(key); sout(key.getName() +","+ key.getAge()+","+value);}
键雷同值应该笼罩掉,如果笼罩掉须要重写hashCode()和equals()办法
重写 alt+insert重写
案例 ArrayList汇合存储 HashMap元素并遍历
//创立ArrayList汇合ArrayList<HashMap<String,String>> array = new ArrayList<HashMap<String,String>>();//创立HashMap汇合并增加键值对元素HashMap<String String> hm1 = new HashMap<String String>(); hm1.put("孙策","大乔");hm1.put("周瑜","小乔");//把HashMap作为元素增加到ArrayList汇合array.add(hm1);HashMap<String String> hm2 = new HashMap<String String>(); hm2.put("郭靖","黄蓉");hm2.put("杨过","小龙女");//把HashMap作为元素增加到ArrayList汇合array.add(hm2);HashMap<String String> hm3 = new HashMap<String String>(); hm3.put("令狐冲","任盈盈");hm3.put("林平之","岳灵珊");//把HashMap作为元素增加到ArrayList汇合array.add(hm3);//遍历ArrayList汇合for(HashMap<String String> hm : array){ Set<String> keySet = hm.KeySet(); for(String key : keySet){ String value = hm.get(key); sout(key +","+ value); }}
输入后果
案例 HashMap汇合存储ArrayList元素并遍历
//创立HashMap汇合,键是String类型,值是ArrayList类型HashMap<String ,ArrayList<String>> hm = new HashMap<String ArrayList<String>>(); //创立ArrayList汇合,并增加元素ArrayList<String> sgyy = new ArrayList<String>();//增加元素sgyy.add("诸葛亮");sgyy.add("赵云");//把ArrayList汇合作为元素增加到HashMap汇合hm.put("三国演义",sgyy);//创立ArrayList汇合,并增加元素ArrayList<String> xyj = new ArrayList<String>();//增加元素xyj.add("唐僧");xyj.add("孙悟空");//把ArrayList汇合作为元素增加到HashMap汇合hm.put("西游记",xyj);//创立ArrayList汇合,并增加元素ArrayList<String> shz = new ArrayList<String>();//增加元素shz.add("武松");shz.add("鲁智深");//把ArrayList汇合作为元素增加到HashMap汇合hm.put("水浒传",shz);//遍历 遍历HashMap汇合Set<String> keySet = hm.KeySet();for(String key : keySet){ sout(key); ArrayList<String> value = hm.get(key); //遍历ArrayList汇合 for(String s : value){ sout("\t"+s); } }
输入后果
案例 统计字符串中每个字符呈现的次数
//键盘录入一个字符串Scanner sc = new Scanner(System.in);sout("请输出一个字符串:");String line = sc.nextLine();//创立HashMap汇合,键是Character,值是IntergerHashMap<Character, Interger> hm = new HashMap<Character, Interger>(); //遍历字符串失去每一个字符for(int i = 0;i<line.length();i++){ char key = line.charAt(i); //拿失去的每一个字符作为键到HashMap汇合中去找对应额值,看其返回值 Interger value = hm.get(key); if(value == null){ //如果返回值是null,阐明该字符再HashMap汇合中不存在,就把该字符作为键,1为值存储 hm.put(key,1); }else{ //如果返回值不是null,阐明该字符再HashMap汇合中是存在的,就把该值加1,而后从新存储该字符和对应的值 value++; hm.put(key,value); }}//遍历HashMap汇合,失去键和值,依照要求进行拼接 拼接用StringBuilderStringBuilder sb = new StringBuilder();Set<Character> keySet = hm.keySet();for(Character key : keySet){ Interger value = hm.get(key); sb.append(key).append("(").append(value).append(")"); }//此时外面四StringBuilder类型,须要转化成String类型String result = sb.toString();//输入后果sout(result);
TreeMap能够对键进行排序