一、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 所示。
具体的实现代码如下:
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);
}
}
}