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是父类固定的 父类集合存放子类对象
  • 相关阅读:
    prototype.js超强的javascript类库
    MySQL Server Architecture
    Know more about RBA redo block address
    MySQL无处不在
    利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
    LAMP Stack
    9i中DG remote archive可能导致Primary Database挂起
    Oracle数据库升级与补丁
    Oracle为何会发生归档日志archivelog大小远小于联机重做日志online redo log size的情况?
    Oracle Ksplice如何工作?How does Ksplice work?
  • 原文地址:https://www.cnblogs.com/fly-book/p/9860611.html
Copyright © 2011-2022 走看看