一、Java Map集合详解

Map集合概述和特点
概述:
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。

Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。其中,HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。

二、Map集合的功能概述

a:添加功能
V put(K key,V value):添加元素。这个其实还有另一个功能?替换
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
b:删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
d:获取功能
Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
V get(Object key):根据键获取值
Set keySet():获取集合中所有键的集合
Collection values():获取集合中所有值的集合
e:长度功能
int size():返回集合中的键值对的对数

Map 接口中提供的常用方法如表 1 所示。

Java MAP集合 过滤 java中map集合详解_Java MAP集合 过滤

 具体的实现代码如下:

import java.util.HashMap;
import java.util.Map;

public class A01_MapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//1.创建Map集合对象
		Map<String,String> m=new HashMap();
		
		//2.添加元素
		m.put("郭靖", "黄蓉");
		m.put("韦小宝", "木健平");
		m.put("尹志平", "小龙女");
		
		m.put("韦小宝", "小龙女");
		
		//4.删除
		//String result=m.remove("郭靖");
		//System.out.println(result);
		
		//5.清空
		//m.clear();
		
		//6.是否包含指定的键
		//boolean result=m.containsKey("韦小宝");
		//System.out.println(result);
		
		//7.是否包含指定的值
		//boolean result=m.containsValue("小龙女");
		//System.out.println(result);
		
		//8.判断集合是否为空
		boolean result=m.isEmpty();
		System.out.println(result);
		
		//9.集合的长度,也就是键值对的个数
		int length=m.size();
		System.out.println(length);
		
		
		
		
		//3.打印集合
		System.out.println(m);

	}

}

三、LinkedHashMap的概述和使用

LinkedHashMap的概述: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序LinkedHashMap的特点: 底层的数据结构是链表和哈希表 元素有序 并且唯一
元素的有序性由链表数据结构保证 唯一性由 哈希表数据结构保证
Map集合的数据结构只和键有关

案例需求:

创建一个HashMap集合,键是学生对象(Student,值是String)。

存储三个键值对元素,并遍历

要求:同姓名、同年龄认为是同一个学生

public class Student {
	
	private String name;
	private int age;
	
	public Student() {
		// TODO Auto-generated constructor stub
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student {name=" + name + ", age=" + age + "}";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
	

}

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class A05_MapDemp5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//1.创建HashMap集合
		HashMap<Student,String> map=new HashMap<>();
		
		//2.创建三个学生对象
		Student s1=new Student("张三",23);
		Student s2=new Student("李四",24);
		Student s3=new Student("王五",25);
		Student s4=new Student("王五",25);
		
		//3.将三个学生对象添加到集合当中
		map.put(s1, "河北");
		map.put(s2, "安徽");
		map.put(s3, "浙江");
		map.put(s4, "江苏");
		
		Set<Student> keys=map.keySet();
		for(Student key:keys) {
			String value=map.get(key);
			System.out.println(key+"="+value);
		}
		

	}

}