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是父类固定的 父类集合存放子类对象
  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/fly-book/p/9860611.html
Copyright © 2011-2022 走看看