Map集合
需求:我班有一群学生,学生里面有重名,如果拿姓名区分同学,可能无法达到需求
我们可以给每个学生给一个编号来区分,
键---->值 这种对应关系的数据如何存储
s001---张三
.
.
.
Map专门用来存储键--->值关系的数据
Map是接口
linkedhashmap
hashmap
hashtable
treemap
collection 是单列集合
Map 是双列集合
HashMap
基于哈希表的Map接口的实现
Map集合所有数据结构,只和键有关
Map<String,String> hm = new HashMap<String,String>
put往Map集合中添加键和值
hm.put("黄","辉冯");
hm.put("胡","锅");
====如果键相同返回上一次键所对应的值
获取(遍历Map集合)
与获取相关方法
键找值:String v = hm.get("黄");
获取所有的值:Collection<String> values = hm.values();
for(String value:values){
sout(value);
}
获取所有的键:Set<String> keys = hm.KeySet();
for(String key:keys){
sout(key);
}
KeySet(),get()
先获取键,在通过键找值
public class Map1 {
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<>();
hm.put("黄","飞鸿");
hm.put("赵","四");
//键找值
Set<String> k = hm.keySet();
for (String key:k) {
String value = hm.get(key);
System.out.println(key+"==="+value);
}
}
}
输出结果:
黄===飞鸿
赵===四
public class Map1 {
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("黄","飞鸿");
hm.put("赵","四");
//遍历方式 将键值对 看作对象
Set<HashMap.Entry<String,String>> entries= hm.entrySet();
for(HashMap.Entry<String,String> entry: entries){
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"=="+value);
}
}
}
输出结果:
黄===飞鸿
赵===四
无序,允许插入null值
TreeMap
有序
数据结构:二叉树
treeMap.put(1,"bbb");
treeMap.put(3,"bbb");
treeMap.put(4,"bbb");
treeMap.put(2,"bbb");
treeMap.put(5,"bbb");
Map集合的数据结构只和键有关
键不允许插入null,因为没办法排序
//int r = s1.getAge() - s2.getAge();
//int r2 = r == 0 ? s1.getName().compareTo(s2.getName()) : r;
//return -r2
treemap存储学生对象并遍历
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public abstract class Demo2 {
public static void main(String[] args) {
HashMap<String,Student> hashMap = new HashMap<>();
hashMap.put("ts001",new Student("aaa",20));
hashMap.put("ts002",new Student("bbb",22));
hashMap.put("ts003",new Student("ccc",30));
hashMap.put("ts004",new Student("ddd",40));
System.out.println("第一种方法:");
Method1(hashMap);
System.out.println("第二种方法:");
Method2(hashMap);
}
public static void Method1(HashMap<String,Student> hashMap) {
Set<String> set = hashMap.keySet();
for (String str:set) {
Student student = hashMap.get(str);
System.out.println(str+student);
}
}
public static void Method2(HashMap<String,Student> hashMap){
Set<Map.Entry<String, Student>> entries = hashMap.entrySet();
for (Map.Entry<String, Student> entry:entries) {
String key = entry.getKey();
Student value = entry.getValue();
System.out.println(key+" "+value);
}
}
}
自定义对象Student对象
public class Student {
private String name;
private Integer age;
public Student() {
}
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}