集合框架(Map)

    xiaoxiao2022-07-07  195

    集合框架之Map集合

    先来为大家简单说一下Map到底是什么吧 Map是一对一对存储的,Collection是一个一个存储的 简单的来说就是Map有键值

    常用方法

    1、增加 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2、删除 clear() remove(Object key) 3、判断 containsKey(Object key) containsValue(Object value) isEmpty() 4、获取 get(Object key) size() values() entrySet() keySet()

    那么Map到底有什么需要注意的呢?并且有什么东西呢?

    Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合石线程同步的,jdk1.0,效率低 HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。将Hashtable替代;jdk1.2,效率高 TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序

    使用方式

    Map有两种遍历方式我先给大家展示以下Map的便利方式`package com.map;

    import java.util.HashMap; import java.util.Map.Entry; import java.util.Set;

    /**

    初识map在集合中允许嵌套map集合key不能重复put添加集合元素的同时 可以编辑原有的元素如果说集合中没有key对应的value,那么久往集合中添加元素如果说集合中对应key有value值,则代表替换原有的值Map集合没有迭代器方法 那么我们怎么取元素2.返回替换前key对应的value(在开发中很有可能遇到)取元素方法entrySet(性能比KeySet高)keySet三个比较重要的方法

    */ public class MapDemo { private static Object key;

    public static void main(String[] args) { HashMap<String,Object> map = new HashMap<>(); //一夫一妻 map.put("a", 3); map.put("v", 2); map.put("c", 1); map.put("d", 4); map.put("a", 3); //保护隐私 Object put = map.put("a", "*"); System.out.println(put); //需要用到身份证号做其他表的查询 //第一种遍历方式 Set<Entry<String, Object>> entrySet = map.entrySet(); for (Entry<String, Object> entry : entrySet) { System.out.println(entry.getKey() + "===" + entry.getValue()); } System.out.println("---------------------------"); //第二种fore遍历方式 Set<String> keySet = map.keySet(); for (String key : keySet) { System.out.println(key + "===" + map.get(key)); } }

    } `

    练习题`

    package com.map;

    import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap;

    /**

    1 将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出a 建立一个Student类,实例化作为key添加到map集合中b 对学生进行判断重复2 最后按年龄进行排序3 需求改变,按姓名进行排序@author

    */ public class TreeMapDeMo{ public static void main(String[] args) {

    // Map<Student, String> map = new HashMap<>();//第一步方法实例化 // Map<Student, String> map = new TreeMap<>();//第二步方法实例化 Map<Student, String> map = new TreeMap<>(new StuComp()); map.put(new Student(“aa”, 11), “beijing”); map.put(new Student(“bb”, 12), “nanjing”); map.put(new Student(“cc”, 13), “tianjing”); map.put(new Student(“dd”, 14), “dongjing”); map.put(new Student(“aa”, 11), “beijing”); map.put(new Student(“abb”, 11), “beijing”);

    System.out.println(map.size()); Set<Entry<Student, String>> entrySet = map.entrySet(); for (Entry<Student, String> entry : entrySet) { System.out.println(entry.getKey()+"==="+entry.getValue()); } }

    } class Student implements Comparable{ private String name; private int 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 + “]”; } public Student(String name, int age) { this.name = name; this.age = age; } public Student() { }

    @Override public int hashCode() { return this.getName().hashCode() + this.getAge()*39; } //用来判断重复 第一步解决方案 @Override public boolean equals(Object obj) { Student stu = (Student)obj; return this.getAge() == stu.getAge() && this.getName().equals(stu.getName()); } //第二步 @Override public int compareTo(Student o) { int num = this.getAge() - o.getAge(); if(num == 0) { return this.getName().compareTo(o.getName()); } return num; }

    }

    class StuComp implements Comparator{

    @Override public int compare(Student o1, Student o2) { int num = o1.getName().compareTo(o2.getName()); if(num == 0) { return o1.getAge() - o2.getAge(); } return num; }

    }`

    面试Demo

    package com.map; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; /** * 1 将学生作为键,地址作为值进行存储,名字年龄相同则被认定为一个人,最后输出 * a 建立一个Student类,实例化作为key添加到map集合中 * b 对学生进行判断重复 * 2 最后按年龄进行排序 * 3 需求改变,按姓名进行排序 * @author * */ public class TreeMapDeMo{ public static void main(String[] args) { // Map<Student, String> map = new HashMap<>();//第一步方法实例化 // Map<Student, String> map = new TreeMap<>();//第二步方法实例化 Map<Student, String> map = new TreeMap<>(new StuComp()); map.put(new Student("aa", 11), "beijing"); map.put(new Student("bb", 12), "nanjing"); map.put(new Student("cc", 13), "tianjing"); map.put(new Student("dd", 14), "dongjing"); map.put(new Student("aa", 11), "beijing"); map.put(new Student("abb", 11), "beijing"); System.out.println(map.size()); Set<Entry<Student, String>> entrySet = map.entrySet(); for (Entry<Student, String> entry : entrySet) { System.out.println(entry.getKey()+"==="+entry.getValue()); } } } class Student implements Comparable<Student>{ private String name; private int 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 + "]"; } public Student(String name, int age) { this.name = name; this.age = age; } public Student() { } @Override public int hashCode() { return this.getName().hashCode() + this.getAge()*39; } //用来判断重复 第一步解决方案 @Override public boolean equals(Object obj) { Student stu = (Student)obj; return this.getAge() == stu.getAge() && this.getName().equals(stu.getName()); } //第二步 @Override public int compareTo(Student o) { int num = this.getAge() - o.getAge(); if(num == 0) { return this.getName().compareTo(o.getName()); } return num; } } class StuComp implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { int num = o1.getName().compareTo(o2.getName()); if(num == 0) { return o1.getAge() - o2.getAge(); } return num; } }

    集合框架也说了这么久了再与之前的做一些比较

    Collection集合常用方法: 增加、删除、大小、包含、为空、清空、迭代 boolean add(E o); boolean remove(Object o); int size(); boolean contains(Object o); boolean isEmpty(); void clear(); Iterator iterator(); boolean addAll(Collection c); boolean retainAll(Collection c); boolean removeAll(Collection c); Set集合常用的方法: 与Collection集合拥有的方法一样; List集合常用的方法: List集合的方法中,带索引参数(角标)的都是新增的方法;带角标的操作都是数组原理; 除了继承Collection集合的方法,还有以下自己独有的方法,都与索引(下标)有关: 增加、删除、修改(只能是修改,不能是插入)、查找(获取)元素、查找元素所在位置(两种); void add(int index, E e); E remove(int index); E set(int index, E e); E get(int index); int indexOf(Object o); int lastIndexOf(Object o); Map集合常用的方法: 增加、删除、修改、查找(获取)、大小、包含、为空、清空、迭代 V put(K k, V v); V remove(Object k); put()方法也起到修改功能 V get(Object k); int size(); boolean containsKey(Object k); boolean containsValue(Object v); boolean isEmpty(); void clear();

    最后

    集合框架作为一种结构,主要是方便我们用一定的模式进行开发,了解好每个集合的使用才能更好的方便我们,谢谢大家

    最新回复(0)