Map集合

    Map集合:元素是键值对构成的

    Map特点:
        1、在同一个Map集合中,键是唯一的
        2、在同一个Map集合中,值可以发生重复
        3、一对键值,表示Map集合中的一个元素

 Map的唯一性指的是键的唯一性,HashMap中需要键的类型要重写hashCode()方法和equals方法

点击查看代码
public class HashMapDemo1 {
    public static void main(String[] args) {
        HashMap<Student, String> map = new HashMap<>();
        map.put(new Student("张三",21),"在读大学");

        map.put(new Student("张四",18),"在读高中");

        map.put(new Student("李四",15),"在初中");

        map.put(new Student("王五",12),"在读小学");
        System.out.println(map);

    }
}

    Map集合中的方法:
        V put(K key,V value)
        V remove(Object key)
        void clear()
        boolean containsKey(Object key)
        boolean containsValue(Object value)
        boolean isEmpty()
        int size()
        V get(Object key)
        Set<K> keySet()
        Collection<V> values()
        Set<Map.Entry<K,V>> entrySet()
点击查看代码
public class MapDemo1 {
    public static void main(String[] args) {
        HashMap<Integer, String> map = new HashMap<>();
//        V put(K key,V value)
        map.put(1001,"王骏");

        map.put(1002,"李娜");

        map.put(1003,"刘三");

//        V remove(Object key)
        map.remove(1001);

        System.out.println(map);
//        void clear()
//        map.clear();
//        System.out.println(map);

//        boolean containsKey(Object key)
        System.out.println(map.containsKey(1003));

//        boolean containsValue(Object value)
        System.out.println(map.containsValue("李娜"));

//        boolean isEmpty()
        System.out.println(map.isEmpty());

//        int size()
        System.out.println(map.size());

//        V get(Object key)
        System.out.println(map.get(1003));

        //        Set<K> keySet()//获取所有的建
        Set<Integer> keySet = map.keySet();
        for (Integer i : keySet) {
            System.out.println(i);
        }
//        Collection<V> values()//获取所有的值
        Collection<String> values = map.values();
        for (String v : values) {
            System.out.println(v);
        }
//        直接获取所有的键值对,遍历每一个键值对得到每一个键和值
//        //Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<Integer, String>> entries = map.entrySet();
        for (Map.Entry<Integer, String> e : entries) {
            Integer key = e.getKey();
            String value = e.getValue();
            System.out.println(key+":"+value);
        }


    }
}
    "aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:
       "a(5)b(4)c(3)d(2)e(1)"

基本做法就是先将非map集合进行拆分(key,value),题目中会给出Key ,value的具体要求
创建map集合(有序使用treemap集合)将其存入map中

点击查看代码
public class TreeMapDemo1 {
    public static void main(String[] args) {
        String s =  "aababcabcdabcde";
        TreeMap<Character, Integer> map = new TreeMap<>();//创建一个TreeMap
        char[] ch = s.toCharArray();//将字符串类型转换为字符数组
        for (char c : ch) {//使用增强for循环对其进行遍历
            if(map.containsKey(c)){//限制条件,存入map集合(设置一下哪一个是key,哪一个是Value)
                map.put(c,map.get(c)+1);//get(c)通过建求值

            }else{
                map.put(c,1);
            }
        }
        StringBuilder sb = new StringBuilder();//实现字符拼接
        Set<Map.Entry<Character, Integer>> entries = map.entrySet();//map循环进行遍历
        for (Map.Entry<Character, Integer> entry : entries) {
            Character key = entry.getKey();//将我们的集合里的每一个键值对,拆分开,分别获取Key和Value
            Integer value = entry.getValue();
            //最后将我们的键值与括号进行凭接
            sb.append(key).append("(").append(value).append(")");
        }
        String s1 = sb.toString();
        System.out.println(s1);
    }
}

定义一个教师类按照年龄进行排序,格式如下
张三(17)李四(20)小虎(21)笑笑(23)
目前:方法一:创建一个treeMap集合,map集合(<Teacher(最终目的是为了获取age),String(为了获取名字)>)(只能对Key进行排序),重写Comparator方法
排完序之后无法进行直接进行直接求age的值,key的类型是Teacher类型,需要再创建一个map1集合,并将map集合进行遍历,求出Key,和value的值其中Key 的值要 求出他的
t.getAge()重新赋值给key,放入集合Map1中
在对他进行拼接遍历
<details>
点击查看代码
public class TreeMapDemo2 {
    public static void main(String[] args) {
        HashSet<Teacher> set = new HashSet<>();
        TreeMap<Teacher, String> map = new TreeMap<>(new Comparator<Teacher>() {
            @Override
            public int compare(Teacher o1, Teacher o2) {
                int i = o1.getAge() - o2.getAge();
                return (i==0)?o1.getId().compareTo(o2.getId()):i;
            }
        });

        set.add(new Teacher("c1001","小虎",21));
        set.add(new Teacher("c1001","笑笑",23));
        set.add(new Teacher("c1001","李四",20));
        set.add(new Teacher("c1001","张三",17));
        System.out.println(set);
        for (Teacher t : set) {
            map.put(t,t.getName());
        }
        TreeMap<Integer, String> map1 = new TreeMap<>();
        Set<Map.Entry<Teacher, String>> entries = map.entrySet();
        for (Map.Entry<Teacher, String> entry : entries) {
            Teacher key = entry.getKey();
            int age = key.getAge();
            String value = entry.getValue();
            map1.put(age,value);
        }
        Set<Map.Entry<Integer, String>> entries1 = map1.entrySet();
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<Integer, String> entry : entries1) {
            Integer key = entry.getKey();
            String value = entry.getValue();
            sb.append(value).append("(").append(key).append(")");
        }
        String s = sb.toString();
        System.out.println(s);

    }
}
posted @ 2024-10-21 00:43  wang_jun  阅读(254)  评论(0)    收藏  举报