java集合框架--Map集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合框架--Map集合相关的知识,希望对你有一定的参考价值。
1.Map集合的概述
Map集合是将键映射到值的对象。一个映射不能包含重复的键。每个键最多只能映射到一个值。
2.Map接口和Collection接口的不同?
Map集合存储元素是成对出现的,Collection集合存储元素是单独出现的。
Map集合的键是唯一的,值是可重复的。
Collection集合的子接口Set是唯一的,List是可重复的。
Map集合的数据结构值针对键有效,和值无关,而Collection接口的数据结构是针对元素有效。
3.Map集合示例及功能
package cn; import java.util.HashMap; import java.util.Map; /** * 作为学生来说,是根据学生学号来区分不同的学生的。 * 那么假设我现在已经知道了学生的学号,我要根据学号去获取学生的姓名,怎么办? * * 如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员, * 然后存储整个对象,将来遍历的时候,判断,获取对应的名称。 * * 但是如果我都知道能把学生姓名拿出来,我还需要根据编号去查找吗? * 针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,java就提供了一种新的集合--Map集合。 * * Map集合的功能概述: * 添加功能 * public V put(K key,V value):添加元素 * 如果键是第一次存储,救命直接存储元素,返回null,如果键不是第一次存储,就用值把以前的值覆盖掉,返回以前的值。 * 删除功能 * public void clear() 清空所有的键值元素 * public V remove(Object key) 根据键删除键值对元素,并把值返回 * 判断功能 * public boolean containsKey(Object key):判断集合中是否包含指定的键 * public boolean containsValue(Object value):判断集合中是否包含指定的值 * public boolean isEmpty() 判断集合是否为空 * 获取功能 * Set<Map.Entry<K,V>> entrySet() * public V get(Object key) 根据键获取值 * Set<E> keySet() 获取集合中所有键的集合 * Collection<V>() values 获取集合中所有的值的集合 * 长度功能 * public int size() 返回集合中键值对的个数 */ public class MapDemo { public static void main(String[] args) { //创建Map集合 Map<String, String> map = new HashMap<String, String>(); //添加元素 System.out.println(map.put("文章", "马伊琍")); System.out.println(map.put("文章", "姚笛")); map.put("邓超", "孙俪"); map.put("黄晓明", "杨颖"); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); System.out.println(map); System.out.println("remove:"+map.remove("黄晓明")); System.out.println(map); System.out.println(map.containsKey("周杰伦")); System.out.println(map.isEmpty()); System.out.println(map.size()); } }
null
马伊琍
{邓超=孙俪, 文章=姚笛, 周杰伦=昆凌, 黄晓明=杨颖, 刘恺威=杨幂}
remove:杨颖
{邓超=孙俪, 文章=姚笛, 周杰伦=昆凌, 刘恺威=杨幂}
true
false
4
4.Map集合的获取功能
package cn; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Map集合的获取功能 * */ public class MapDemo2 { public static void main(String[] args) { //创建集合对象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("邓超", "孙俪"); map.put("黄晓明", "杨颖"); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); //public V get(Object key) 根据键获取值 System.out.println(map.get("黄晓明"));//杨颖 //Set<E> keySet() 返回所有键的集合 Set<String> set = map.keySet(); for(String str :set){ System.out.println(str); } /** * 邓超 * 周杰伦 * 黄晓明 * 刘恺威 */ //Collection<V> values() 返回值的集合 Collection<String> v = map.values(); for(String str :v){ System.out.println(str); } /** * 孙俪 * 昆凌 * 杨颖 * 杨幂 */ } }
5.Map集合的遍历方式一
package cn; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Map集合的遍历 * */ public class MapDemo3 { public static void main(String[] args) { //创建集合对象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("邓超", "孙俪"); map.put("黄晓明", "杨颖"); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); //遍历集合 Set<String> set = map.keySet(); for(String str:set){ System.out.println(str+":"+map.get(str)); } } }
邓超:孙俪
周杰伦:昆凌
黄晓明:杨颖
刘恺威:杨幂
6.Map集合遍历方式二
package cn; /** * Map集合遍历 */ import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo4 { public static void main(String[] args) { //创建集合对象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("邓超", "孙俪"); map.put("黄晓明", "杨颖"); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); Set<Map.Entry<String, String>> entrySet = map.entrySet(); for(Map.Entry<String, String> me : entrySet){ String key = me.getKey(); String value = me.getValue(); System.out.println(key+":"+value); } } }
邓超:孙俪
周杰伦:昆凌
黄晓明:杨颖
刘恺威:杨幂
7.Map集合遍历
方式1:根据键找值
获取所有键的集合
遍历键的集合,获取到每一个键
根据键找到值
package cn; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Map集合的遍历 * */ public class MapDemo3 { public static void main(String[] args) { //创建集合对象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("邓超", "孙俪"); map.put("黄晓明", "杨颖"); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); //遍历集合 Set<String> set = map.keySet(); for(String str:set){ System.out.println(str+":"+map.get(str)); } } }
方式2:根据键值对对象找键和值
package cn; /** * Map集合遍历 */ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo4 { public static void main(String[] args) { //创建集合对象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("邓超", "孙俪"); map.put("黄晓明", "杨颖"); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); Set<Map.Entry<String, String>> entrySet = map.entrySet(); for(Map.Entry<String, String> me :entrySet){ String key = me.getKey(); String value = me.getValue(); System.out.println(key+":"+value); } System.out.println("-------------------------------"); for(Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();iterator.hasNext();){ Map.Entry<String, String> mapValue = iterator.next(); String key = mapValue.getKey(); String value = mapValue.getValue(); System.out.println(key+":"+value); } } }
邓超:孙俪
周杰伦:昆凌
黄晓明:杨颖
刘恺威:杨幂
-------------------------------
邓超:孙俪
周杰伦:昆凌
黄晓明:杨颖
刘恺威:杨幂
8.Map集合遍历方式图解
9.Map集合练习
package cn; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * HashMap:是基于哈希表的Map接口实现。 * 哈希表的作用是保证键的唯一性。 * */ public class HashMapDemo { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("it001", "马云"); map.put("it002", "马化腾"); map.put("it003", "乔布斯"); map.put("it004", "张朝阳"); map.put("it005", "雷军"); Set<String> set = map.keySet(); for(String str:set){ System.out.println(str+":"+map.get(str)); } System.out.println("------------------"); Set<Map.Entry<String, String>> s = map.entrySet(); for(Map.Entry<String, String> me :s){ System.out.println(me.getKey()+":"+me.getValue()); } System.out.println("-----------------"); for(Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();iterator.hasNext();){ Map.Entry<String, String> m = iterator.next(); System.out.println(m.getKey()+":"+m.getValue()); } } }
it004:张朝阳
it003:乔布斯
it005:雷军
it002:马化腾
it001:马云
------------------
it004:张朝阳
it003:乔布斯
it005:雷军
it002:马化腾
it001:马云
-----------------
it004:张朝阳
it003:乔布斯
it005:雷军
it002:马化腾
it001:马云
10.LinkedHashMap类概述
Map接口的哈希表和链表实现,具有可预知的迭代顺序。
package cn; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; public class LinkedHashMapDemo { public static void main(String[] args) { Map<String, String> map = new LinkedHashMap<String, String>(); map.put("it001", "马云"); map.put("it002", "马化腾"); map.put("it004", "张朝阳"); map.put("it003", "乔布斯"); map.put("it005", "雷军"); Set<String> set = map.keySet(); for(String str :set){ System.out.println(str+":"+map.get(str)); } System.out.println("-----------------"); Set<Map.Entry<String, String>> mapValue = map.entrySet(); for(Map.Entry<String, String> me : mapValue){ String key = me.getKey(); String value = me.getValue(); System.out.println(key+":"+value); } System.out.println("-------------------"); for(Iterator<Map.Entry<String, String >> iterator = map.entrySet().iterator();iterator.hasNext();){ Map.Entry<String, String> m = iterator.next(); String key = m.getKey(); String value = m.getValue(); System.out.println(key+":"+value); } } }
it001:马云
it002:马化腾
it004:张朝阳
it003:乔布斯
it005:雷军
-----------------
it001:马云
it002:马化腾
it004:张朝阳
it003:乔布斯
it005:雷军
-------------------
it001:马云
it002:马化腾
it004:张朝阳
it003:乔布斯
it005:雷军
11.TreeMap
package cn; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * TreeMap */ public class TreeMapDemo { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>(); map.put("it001", "马云"); map.put("it003", "乔布斯"); map.put("it004", "张朝阳"); map.put("it002", "马化腾"); map.put("it005", "雷军"); //遍历方法一 Set<String> set = map.keySet(); for(String str:set){ System.out.println(str+":"+map.get(str)); } System.out.println("---------------"); //遍历方法二 Set<Map.Entry<String, String>> s = map.entrySet(); for(Map.Entry<String, String> me:s){ System.out.println(me.getKey()+":"+me.getValue()); } System.out.println("---------------"); //遍历方法三 for(Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();iterator.hasNext();){ Map.Entry<String, String> me = iterator.next(); String key = me.getKey(); String value = me.getValue(); System.out.println(key+":"+value); } } }
it001:马云
it002:马化腾
it003:乔布斯
it004:张朝阳
it005:雷军
---------------
it001:马云
it002:马化腾
it003:乔布斯
it004:张朝阳
it005:雷军
---------------
it001:马云
it002:马化腾
it003:乔布斯
it004:张朝阳
it005:雷军
package cn; import java.util.Comparator; import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class TreeMapDemo2 { public static void main(String[] args) { Map<Student, String> map = new TreeMap<Student, String>(new Comparator<Student>(){ @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }); Student s1 = new Student("哈哈",24); Student s2 = new Student("呵呵",20); Student s3 = new Student("嘻嘻",48); Student s4 = new Student("笨笨",23); map.put(s1, "唐"); map.put(s2, "宋"); map.put(s3, "明"); map.put(s4, "清"); for(Iterator<Map.Entry<Student, String>> iterator = map.entrySet().iterator();iterator.hasNext();){ Map.Entry<Student, String> me = iterator.next(); Student stu = me.getKey(); String value = me.getValue(); System.out.println(stu+":"+value); } } }
Student [name=呵呵, age=20]:宋
Student [name=笨笨, age=23]:清
Student [name=哈哈, age=24]:唐
Student [name=嘻嘻, age=48]:明
12."aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
package cn; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * "aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1) * 分析: * 1.定义一个字符串 * 2.定义一个TreeMap集合 * 键:Character * 值:Integer * 、 3.把字符串转换为字符数组 * 4.遍历字符数组,得到每一个字符 * 5.拿刚才得到的字符作为键到集合中去找,看返回值 * 是null:说明该键不存在,就把该字符作为键,1作为值存储 * 不是Null:说明该键存在,就把值+1,重新存储该键和值 */ public class TreeMapTest { public static void main(String[] args) { String str = "aababcabcdabcde"; char[] chs = str.toCharArray(); Map<Character, Integer> map = new TreeMap<Character, Integer>(); for(char ch:chs){ Integer i = map.get(ch); if(null == i){ map.put(ch, 1); }else{ i++; map.put(ch, i); } } StringBuilder sb = new StringBuilder(); Set<Character> set = map.keySet(); for (Character character : set) { Integer value = map.get(character); sb.append(character).append("(").append(value).append(")"); } System.out.println(sb.toString()); } }
a(5)b(4)c(3)d(2)e(1)
本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1864062
以上是关于java集合框架--Map集合的主要内容,如果未能解决你的问题,请参考以下文章