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集合的主要内容,如果未能解决你的问题,请参考以下文章

java集合框架--Map集合

Java集合: 集合框架Collection和Map

Java集合框架中接口Collection和Map的区别

Java集合源代码剖析Java集合框架

Java集合框架总结——Map接口的使用

Java知识33 集合框架 List接口 Map 和set多测师