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
原文:http://11841428.blog.51cto.com/11831428/1864062