Map接口
- Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
- Map是不同于Collection的另外一种集合接口
- Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
- Map接口有两个实现:
- HashMap — key/value对 是按照Hash算法存储的 TreeMap — key/value对是排序 (按key排序)存储的
写入和遍历顺序不同且不重复 无序与set差不多
Map再次存入相同键时会覆盖原先的值
主类
package JavaSE.集合.Map接口; import java.util.*; public class MyMap { public static void main(String[] args) { //对象的创建 Map<String, Student> map = new HashMap<>(); List<Student> stuList = new ArrayList(); stuList.add(new Student("张飞", 50)); stuList.add(new Student("张飞1", 36)); stuList.add(new Student("张飞2", 20)); stuList.add(new Student("张飞3", 58)); //如果要查找某一个元素的属性,需要遍历集合后查找元素才能获取舒心 for (Student student : stuList) { if ("张飞3".equals(student.getName())) { System.out.println("student.age\t" + student.getAge()); break; } } //put key不可以重复 map.put("张飞", new Student("张飞", 50)); map.put("张飞1", new Student("张飞1", 36)); map.put("张飞2", new Student("张飞2", 20)); map.put("张飞3", new Student("张飞3", 58)); map.put("张飞3", new Student("张飞3", 999)); //get根据key获取指定的元素,底层使用hash计算索引,快速查找元素 Student stu = map.get("张飞3"); System.out.println(stu.getAge()); Set<String> keySet = map.keySet(); for (String key : keySet) { System.out.printf("key:%s\tvalue:%s\r\n", key, map.get(key).toString()); } /** * int size() * void clear() * boolean isEmpty() */ System.out.println("map.size\t" + map.size()); System.out.println("map.isEmpty\t" + map.isEmpty()); Map map2 = new HashMap(); map2.put("张飞3", new Student("张飞3", 999)); map2.put("张飞4", new Student("张飞4", 20)); Student zf5 = new Student("张飞5", 58); map2.put("张飞5", zf5); map.putAll(map2); System.out.println("map.size\t" + map.size()); System.out.println("map.get(\"张飞3\")\t" + map.get("张飞3").getAge()); System.out.println("map.containsKey(\"张飞\")\t" + map.containsKey("张飞")); System.out.println("map.containsKey(\"张飞99\")\t" + map.containsKey("张飞99")); System.out.println("map.containsValue(new Student(\"张飞5\",58)\t" + map.containsValue(zf5)); System.out.println("========================size=============================="); System.out.println("map.size\t" + map.size()); map.remove("张飞3"); System.out.println("map.size\t" + map.size()); System.out.println("===========================HashMap的遍历1=================================="); Set<String> keySet1 = map.keySet(); for (String key : keySet1) { System.out.printf("key:%s\tvalue:%s\r\n", key, map.get(key).toString()); } System.out.println("===========================HashMap的遍历2=================================="); Set<Map.Entry<String, Student>> entrySet = map.entrySet(); for (Map.Entry<String, Student> stringStudentEntry : entrySet) { String key = stringStudentEntry.getKey(); Student value = stringStudentEntry.getValue(); System.out.printf("key:%s\tvalue:%s\r\n", key, value.toString()); } } }
Student类
package JavaSE.集合.Map接口; public class Student { private String name; private Integer age; @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } 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; } }