zoukankan      html  css  js  c++  java
  • 10 HashMap,Map.Entry,LinkedHashMap,TreeMap,Hashtable,Collections类

    Map集合的功能概述

    •     添加功能

            * V put(K key,V value):添加元素。
                * 如果键是第一次存储,就直接存储元素,返回null
                * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

    •     删除功能

            * void clear():移除所有的键值对元素
            * V remove(Object key):根据键删除键值对元素,并把值返回

    •     判断功能

            * boolean containsKey(Object key):判断集合是否包含指定的键
            * boolean containsValue(Object value):判断集合是否包含指定的值
            * boolean isEmpty():判断集合是否为空

    •     获取功能

            * Set<Map.Entry<K,V>> entrySet():
            * V get(Object key):根据键获取值
            * Set<K> keySet():获取集合中所有键的集合
            * Collection<V> values():获取集合中所有值的集合

    •     长度功能

            * int size():返回集合中的键值对的个数

    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Demo1_Map {
    
        public static void main(String[] args) {
        /*    Map接口:
                * 将键映射到值的对象
                * 一个映射不能包含重复的键
                * 每个键最多只能映射到一个值
            Map接口和Collection接口的不同
                * Map是双列的,Collection是单列的
                * Map的键唯一,Collection的子体系Set是唯一的
                * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构
    
    是针对元素有效*/
            Map<String, Integer> map = new HashMap<>();
            Integer i1 = map.put("张三", 23);
            Integer i2 = map.put("李四", 24);
            Integer i3 = map.put("赵武", 21);
            Integer i4 = map.put("张三", 24);
    
    /*        System.out.println(map);//{赵武=21, 李四=24, 张三=24}
    
            System.out.println(i1);//null
            System.out.println(i2);//null
            System.out.println(i3);//null
    //        System.out.println(i4);//23  //相同的键不存储,值覆盖,返回被覆盖的值
    
            Integer value = map.remove("张三"); //根据键删除元素,返回键对应的值
            System.err.println(value);//24
            System.out.println(map);//{赵武=21, 李四=24}
    
            System.out.println(map.containsKey("李四"));//true
            System.out.println(map.containsValue(21));//true
    */    
            Collection<Integer> collection = map.values();//获取所有的值
            System.out.println(collection);//[21, 24, 24]
            System.out.println(map.size());//3  //返回集合中键值得个数
    
        }
    
    }


    Map遍历:

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    import javax.swing.text.html.parser.Entity;
    
    public class Demo2_Iterator {
    
        public static void main(String[] args) {
            //遍历Map
            Map<String, Integer> map = new HashMap<>();
            Integer i1 = map.put("张三", 23);
            Integer i2 = map.put("李四", 24);
            Integer i3 = map.put("赵武", 21);
            Integer i4 = map.put("张三", 24);
    
    /*        Set<String> keySet = map.keySet(); //获取所有的键集合
            Iterator<String> iterator = keySet.iterator();
            while(iterator.hasNext()) {
                String key = iterator.next();
                Integer value = map.get(key);
                System.out.println(key+"="+value);
            }*/
    
            //使用增强for
    /*        for(String key:map.keySet()) {
                System.out.println(key+"="+map.get(key));
            }*/
    
    //        //使用Map.Entry
    //        //Entry是Map的内部接口
    //        //将键和值封装成Entry对象,并存储在Set集合中
    //        Set<Map.Entry<String, Integer>> entries = map.entrySet();
    //        Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
    //        while (iterator.hasNext()) {
    //            Map.Entry<String,Integer> entry = iterator.next();//父类引用指向子
    
    类对象
    //            String key = entry.getKey();
    //            Integer value = entry.getValue();
    //            System.out.println(key+"="+value);
    //        }
    
            //改for
            //Entry是Map.Entry的子类对象
            for(Entry<String, Integer> entry:map.entrySet()) {
                System.out.println(entry.getKey()+"="+entry.getValue());
            }
        }
    
    }
    HashMap存储:
    import java.util.HashMap;
    
    import com.fly.bean.Student;
    
    public class Demo3_HashMap {
    
        public static void main(String[] args) {
            // HashMap存储
            //Student需要重写hashCode(),equals()方法
            HashMap<Student, String> hMap = new HashMap<>();
            hMap.put(new Student("张三",19),"aa");
            hMap.put(new Student("李四",19),"cc");
            hMap.put(new Student("王五",19),"dd");
            hMap.put(new Student("张三",19),"bb");
    
            System.out.println(hMap);
        }
    
    }

    LinkedHashMap:

    import java.util.LinkedHashMap;
    
    public class Demo4_LinkedHashMap {
    
        public static void main(String[] args) {
            LinkedHashMap<String, Integer> lHashMap = new LinkedHashMap<>();
            lHashMap.put("b", 11);
            lHashMap.put("a", 22);
            lHashMap.put("d", 44);
            lHashMap.put("c", 33);
    
            System.out.println(lHashMap);//{b=11, a=22, d=44, c=33}
        }
    
    }


    TreeMap:

    import java.util.TreeMap;
    
    import com.fly.bean.Student;
    
    public class Demo5_TreeMap {
        public static void main(String[] args) {
            TreeMap<Student, String> tMap = new TreeMap<>();
            tMap.put(new Student("张三",13), "aa");
            tMap.put(new Student("张三",13), "bb");
            tMap.put(new Student("李四",12), "cc");
            tMap.put(new Student("王五",15), "dd");
    
            System.out.println(tMap);//{Student [name=李四, age=12]=cc, Student [name=
    
    张三, age=13]=bb, Student [name=王五, age=15]=dd}
    
            //Student需实现Comparable接口,重写的部分
    /*        public class Student implements Comparable<Student> {
                @Override
                public int compareTo(Student o) {
                    int num = this.age - o.age;
                    return num==0 ? this.name.compareTo(o.name) : num;
                }
            }
            */
    
        }
    }

    练习:统计字符串中每个字符出现的次数

    import java.util.HashMap;
    
    public class Test1 {
    
        public static void main(String[] args) {
            // 统计字符串中每个字符出现的次数
            String s = "aaabbbbccccc";
            char[] arr = s.toCharArray();//将字符串转换为字符数组
            // 定义双列集合,存储字符串中字符以及字符出现的次数
            HashMap<Character, Integer> hMap = new HashMap<>();
            for (char c : arr) {
                //有就加1,没有置为1
                hMap.put(c, hMap.containsKey(c) ? hMap.get(c)+1 : 1);
            }
            for (Character key : hMap.keySet()) {
                System.out.println(key+"="+hMap.get(key));
            }
    
        }
    
    }
    View Code


    集合嵌套之HashMap嵌套HashMap:

    import java.util.HashMap;
    
    import com.fly.bean.Student;
    
    public class Demo6_HashMap2 {
    
        public static void main(String[] args) {
            // 集合嵌套之HashMap嵌套HashMap
            HashMap<Student, String> hMap1 = new HashMap<>();
            hMap1.put(new Student("a",12),"bj");
            hMap1.put(new Student("b",13),"sh");
            hMap1.put(new Student("c",15),"gd");
            hMap1.put(new Student("d",12),"sz");
    
            HashMap<Student, String> hMap2 = new HashMap<>();
            hMap2.put(new Student("e",12),"bj");
            hMap2.put(new Student("f",13),"sh");
            hMap2.put(new Student("g",15),"gd");
            hMap2.put(new Student("h",12),"sz");
    
            HashMap<HashMap<Student, String>, String> hashMap = new HashMap<>();
            hashMap.put(hMap1, "1101");
            hashMap.put(hMap2, "1102");
    
            for (HashMap<Student, String> sk : hashMap.keySet()) {
                System.out.println(hashMap.get(sk));
                for (Student key : sk.keySet()) {
                    System.out.println(key+"="+sk.get(key));
                }
            }
        }
    
    }


    HashMap和Hashtable的区别:
    (面试常考)

    import java.util.HashMap;
    import java.util.Hashtable;
    
    public class Demo7_Hashtable {
    
        public static void main(String[] args) {
            /* HashMap和Hashtable的区别
                Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本
    
    出现的,是线程不安全的,效率高
                Hashtable不可以存储null键和null值,HashMap可以存储null键和null值*/
            HashMap<String, Integer> hashMap = new HashMap<>();
            hashMap.put(null, null);
            System.out.println(hashMap);//{null=null}
    
            Hashtable<String, Integer> hashtable = new Hashtable<>();
    //        hashtable.put(null, 1);
    //        hashtable.put("a", null);
    //        System.out.println(hashtable);//NullPointerException
    
        }
    
    }



    Collections类概述:
    针对集合操作 的工具类

    •     Collections成员方法


            public static <T> void sort(List<T> list) 排序
            public static <T> int binarySearch(List<?> list,T key) 二分查找 找不到返回-

    的插入点-1
            public static <T> T max(Collection<?> coll) 根据默认排序结果获取集合中的最

    大值
            public static void reverse(List<?> list) 反转
            public static void shuffle(List<?> list) 随机置换


    泛型固定下边界与泛型固定上边界:

    •  ? super E  ,  E是子类 ?是父类   把子类对象拿出来放到父类的比较器中
    •  ? extends E , 泛型固定上边界 ?是任意子类,E是父类固定的 父类集合存放子类对象
  • 相关阅读:
    JDk和Mevan安装和配置
    如何修改windows系统的host文件
    字符串格式化
    可变和不可变的数据类型
    拦截
    eclipse格式化代码模板
    oracle语法练习汇总
    PLSQL语法
    oracle创建完实例删除的时候报ORA-01031:insufficient privileges错误,解决办法
    socket多线程方式案例
  • 原文地址:https://www.cnblogs.com/fly-book/p/9860611.html
Copyright © 2011-2022 走看看