1.Map集合
1.1Map集合概述和特点【理解】
-
Map集合概述
interface Map<K,V> K:键的类型;V:值的类型
-
Map集合的特点
-
双列集合,一个键对应一个值
-
键不可以重复,值可以重复
-
-
Map集合的基本使用
public class MapDemo01 { public static void main(String[] args) { //创建集合对象 Map<String,String>map=new HashMap<>(); map.put("qianfen01","12"); map.put("qianfen02","18"); map.put("qianfen03","19"); map.put("qianfen04","12"); //输出集合对象 System.out.println(map); } }
1.2Map集合的基本功能【应用】
public class MapDemo02 {
public static void main(String[] args) {
//创建对象
Map<String,String>map=new HashMap<>();
//TODO 添加
map.put("qianfen01","12");
map.put("qianfen02","18");
map.put("qianfen03","19");
map.put("qianfen04","12");
System.out.println(map);
//TODO 删除
map.remove("qianfen01");
System.out.println(map);
// map.clear(); containsKey
System.out.println(map);
//TODO 看看值是否存在
System.out.println(map.containsKey("qianfen02"));
System.out.println(map.containsValue("12"));
//TODO 判读集合是否为空
System.out.println(map.isEmpty());
//TODO 看看集合的大小 size()
System.out.println(map.size());
}
}
1.3Map集合的获取功能【应用】
- 方法介绍 | 方法名 | 说明 | | -------------------------------- | ------------ || | V get(Object key) | 根据键获取值 || | Set<K> keySet() | 获取所有键的集合 || | Collection<V> values() | 获取所有值的集合 || | Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合 ||
- 示例代码
public class MapDemo03 {
public static void main(String[] args) {
//创建对象
Map<String,String>map=new HashMap<>();
map.put("qianfen01","12");
map.put("qianfen02","18");
map.put("qianfen03","19");
map.put("qianfen04","12");
//TODO 通过指定键名或者值
System.out.println(map.get("qianfen01"));
//TODO 咱们获取所有的键名的方法
Set<String> strings = map.keySet();
//TODO 咱们获取所有值得方法
Collection<String> values = map.values();
System.out.println(values);
//TODO 咱们想要获取对象的方法
Set<Map.Entry<String, String>> entries = map.entrySet();
System.out.println(entries);
}
}
1.4Map集合的遍历(方式1)【应用】
public class MapDemo01 {
public static void main(String[] args) {
//创建对象
Map<String,String>map=new HashMap<>();
map.put("qianfen01","12");
map.put("qianfen02","18");
map.put("qianfen03","19");
map.put("qianfen04","12");
//TODO 把所有键名都拿过来,通过键名来取值
Set<String> strings = map.keySet();
for (String s : strings) {
String valus=map.get(s);
System.out.println(valus);
}
}
}
1.5Map集合的遍历(方式2)【应用】
public class MapDemo02 {
public static void main(String[] args) {
//创建对象
Map<String,String>map=new HashMap<>();
map.put("qianfen01","12");
map.put("qianfen02","18");
map.put("qianfen03","19");
map.put("qianfen04","12");
//TODO 我们获取整个对象
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
String keys=entry.getKey();
String values=entry.getValue();
System.out.println(keys+":"+values);
}
}
}
2.HashMap集合
2.1HashMap集合概述和特点【理解】
-
HashMap底层是哈希表结构的
-
依赖hashCode方法和equals方法保证键的唯一
-
如果键要存储的是自定义对象,需要重写hashCode和equals方法
2.2HashMap集合应用案例【应用】
-
案例需求
-
创建一个HashMap集合,键是学生对象(Student),值是居住地 (String)。存储多个元素,并 遍历。
-
要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象
-
-
代码实现
学生类
public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { 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 boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; if (age != student.age) return false; return name != null ? name.equals(student.name) : student.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; } }
测试类
public class HashMapDemo { public static void main(String[] args) { //创建HashMap集合对象 HashMap<Student, String> hm = new HashMap<Student, String>(); //创建学生对象 Student s1 = new Student("林青霞", 30); Student s2 = new Student("张曼玉", 35); Student s3 = new Student("王祖贤", 33); Student s4 = new Student("王祖贤", 33); //把学生添加到集合 hm.put(s1, "西安"); hm.put(s2, "武汉"); hm.put(s3, "郑州"); hm.put(s4, "北京"); //遍历集合 Set<Student> keySet = hm.keySet(); for (Student key : keySet) { String value = hm.get(key); System.out.println(key.getName() + "," + key.getAge() + "," + value); } } }
3.TreeMap集合
3.1TreeMap集合概述和特点【理解】
-
TreeMap底层是红黑树结构
-
依赖自然排序或者比较器排序,对键进行排序
-
如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则
3.2TreeMap集合应用案例一【应用】
-
案例需求
-
创建一个TreeMap集合,键是学生对象(Student),值是籍贯(String),学生属性姓名和年龄,按照年 龄进行排序并遍历
-
要求按照学生的年龄进行排序,如果年龄相同则按照姓名进行排序
-
-
代码实现
学生类
public class Student implements Comparable<Student>{ private String name; private int age; public Student() { } public Student(String name, int age) { 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 compareTo(Student o) { //按照年龄进行排序 int result = o.getAge() - this.getAge(); //次要条件,按照姓名排序。 result = result == 0 ? o.getName().compareTo(this.getName()) : result; return result; } }
测试类
public class Test1 { public static void main(String[] args) { // 创建TreeMap集合对象 TreeMap<Student,String> tm = new TreeMap<>(); // 创建学生对象 Student s1 = new Student("xiaohei",23); Student s2 = new Student("dapang",22); Student s3 = new Student("xiaomei",22); // 将学生对象添加到TreeMap集合中 tm.put(s1,"江苏"); tm.put(s2,"北京"); tm.put(s3,"天津"); // 遍历TreeMap集合,打印每个学生的信息 tm.forEach( (Student key, String value)->{ System.out.println(key + "---" + value); } ); } }