• Java笔记(18):集合框架(04)


    1、Map集合概述特点及测试

     1 package cn.itcast_01;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 /*
     7  * 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?
     8  * 如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称。
     9  * 但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗?
    10  * 针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,Java就提供了一种新的集合 Map。
    11  * 通过查看API,我们知道Map集合的一个最大的特点,就是它可以存储键值对的元素。这个时候存储我们上面的需求,就可以这样做
    12  *         学号1        姓名1
    13  *         学号2     姓名2
    14  *         学号3        姓名3
    15  *         学号2(不行)姓名4
    16  *         学号4               姓名4
    17  * Map集合的特点:
    18  *         将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 
    19  * 
    20  * Map集合和Collection集合的区别?
    21  *         Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
    22  *         Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。可以把这个理解为:光棍(11.11)
    23  * 
    24  * 注意:
    25  *         Map集合的数据结构值针对键有效,跟值无关    
    26  *             HashMap,TreeMap等会讲。
    27  *        Collection集合的数据结构是针对元素有效
    28  * 
    29  * Map集合的功能概述:
    30  * 1:添加功能
    31  *         V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲
    32  *             如果键是第一次存储,就直接存储元素,返回null
    33  *             如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
    34  * 2:删除功能
    35  *         void clear():移除所有的键值对元素
    36  *         V remove(Object key):根据键删除键值对元素,并把值返回
    37  * 3:判断功能
    38  *         boolean containsKey(Object key):判断集合是否包含指定的键
    39  *         boolean containsValue(Object value):判断集合是否包含指定的值
    40  *         boolean isEmpty():判断集合是否为空
    41  * 4:获取功能
    42  *         Set<Map.Entry<K,V>> entrySet():???
    43  *         V get(Object key):根据键获取值
    44  *         Set<K> keySet():获取集合中所有键的集合
    45  *         Collection<V> values():获取集合中所有值的集合
    46  * 5:长度功能
    47  *         int size():返回集合中的键值对的对数
    48  */
    49 public class MapDemo {
    50     public static void main(String[] args) {
    51         // 创建集合对象
    52         Map<String, String> map = new HashMap<String, String>();
    53 
    54         // 添加元素
    55         // V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲
    56         // System.out.println("put:" + map.put("文章", "马伊俐"));
    57         // System.out.println("put:" + map.put("文章", "姚笛"));
    58 
    59         map.put("邓超", "孙俪");
    60         map.put("黄晓明", "杨颖");
    61         map.put("周杰伦", "蔡依林");
    62         map.put("刘恺威", "杨幂");
    63 
    64         // void clear():移除所有的键值对元素
    65         // map.clear();
    66 
    67         // V remove(Object key):根据键删除键值对元素,并把值返回
    68         // System.out.println("remove:" + map.remove("黄晓明"));
    69         // System.out.println("remove:" + map.remove("黄晓波"));
    70 
    71         // boolean containsKey(Object key):判断集合是否包含指定的键
    72         // System.out.println("containsKey:" + map.containsKey("黄晓明"));
    73         // System.out.println("containsKey:" + map.containsKey("黄晓波"));
    74 
    75         // boolean isEmpty():判断集合是否为空
    76         // System.out.println("isEmpty:"+map.isEmpty());
    77         
    78         //int size():返回集合中的键值对的对数
    79         System.out.println("size:"+map.size());
    80 
    81         // 输出集合名称
    82         System.out.println("map:" + map);
    83     }
    84 }

    2、Map集合的获取功能测试

     1 package cn.itcast_01;
     2 
     3 import java.util.Collection;
     4 import java.util.HashMap;
     5 import java.util.Map;
     6 import java.util.Set;
     7 
     8 /*
     9  * 获取功能:
    10  * V get(Object key):根据键获取值
    11  * Set<K> keySet():获取集合中所有键的集合
    12  * Collection<V> values():获取集合中所有值的集合
    13  */
    14 public class MapDemo2 {
    15     public static void main(String[] args) {
    16         // 创建集合对象
    17         Map<String, String> map = new HashMap<String, String>();
    18 
    19         // 创建元素并添加元素
    20         map.put("邓超", "孙俪");
    21         map.put("黄晓明", "杨颖");
    22         map.put("周杰伦", "蔡依林");
    23         map.put("刘恺威", "杨幂");
    24 
    25         // V get(Object key):根据键获取值
    26         System.out.println("get:" + map.get("周杰伦"));
    27         System.out.println("get:" + map.get("周杰")); // 返回null
    28         System.out.println("----------------------");
    29 
    30         // Set<K> keySet():获取集合中所有键的集合
    31         Set<String> set = map.keySet();
    32         for (String key : set) {
    33             System.out.println(key);
    34         }
    35         System.out.println("----------------------");
    36 
    37         // Collection<V> values():获取集合中所有值的集合
    38         Collection<String> con = map.values();
    39         for (String value : con) {
    40             System.out.println(value);
    41         }
    42     }
    43 }

    3、Map集合的遍历之键找值

     1 package cn.itcast_01;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 import java.util.Set;
     6 
     7 /*
     8  * Map集合的遍历。
     9  * Map -- 夫妻对
    10  * 思路:
    11  *         A:把所有的丈夫给集中起来。
    12  *         B:遍历丈夫的集合,获取得到每一个丈夫。
    13  *         C:让丈夫去找自己的妻子。
    14  * 
    15  * 转换:
    16  *         A:获取所有的键
    17  *         B:遍历键的集合,获取得到每一个键
    18  *         C:根据键去找值
    19  */
    20 public class MapDemo3 {
    21     public static void main(String[] args) {
    22         // 创建集合对象
    23         Map<String, String> map = new HashMap<String, String>();
    24 
    25         // 创建元素并添加到集合
    26         map.put("杨过", "小龙女");
    27         map.put("郭靖", "黄蓉");
    28         map.put("杨康", "穆念慈");
    29         map.put("陈玄风", "梅超风");
    30 
    31         // 遍历
    32         // 获取所有的键
    33         Set<String> set = map.keySet();
    34         // 遍历键的集合,获取得到每一个键
    35         for (String key : set) {
    36             // 根据键去找值
    37             String value = map.get(key);
    38             System.out.println(key + "---" + value);
    39         }
    40     }
    41 }

    4、Map集合的遍历之键值对对象找键和值

     1 package cn.itcast_01;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 import java.util.Set;
     6 
     7 /*
     8  * Map集合的遍历。
     9  * Map -- 夫妻对
    10  * 
    11  * 思路:
    12  *         A:获取所有结婚证的集合
    13  *         B:遍历结婚证的集合,得到每一个结婚证
    14  *         C:根据结婚证获取丈夫和妻子
    15  * 
    16  * 转换:
    17  *         A:获取所有键值对对象的集合
    18  *         B:遍历键值对对象的集合,得到每一个键值对对象
    19  *         C:根据键值对对象获取键和值
    20  * 
    21  * 这里面最麻烦的就是键值对对象如何表示呢?
    22  * 看看我们开始的一个方法:
    23  *         Set<Map.Entry<K,V>> entrySet():返回的是键值对对象的集合
    24  */
    25 public class MapDemo4 {
    26     public static void main(String[] args) {
    27         // 创建集合对象
    28         Map<String, String> map = new HashMap<String, String>();
    29 
    30         // 创建元素并添加到集合
    31         map.put("杨过", "小龙女");
    32         map.put("郭靖", "黄蓉");
    33         map.put("杨康", "穆念慈");
    34         map.put("陈玄风", "梅超风");
    35 
    36         // 获取所有键值对对象的集合
    37         Set<Map.Entry<String, String>> set = map.entrySet();
    38         // 遍历键值对对象的集合,得到每一个键值对对象
    39         for (Map.Entry<String, String> me : set) {
    40             // 根据键值对对象获取键和值
    41             String key = me.getKey();
    42             String value = me.getValue();
    43             System.out.println(key + "---" + value);
    44         }
    45     }
    46 }

    5、HashMap集合键是Stirng值是String的案例

     1 package cn.itcast_02;
     2 
     3 import java.util.HashMap;
     4 import java.util.Set;
     5 
     6 /*
     7  * HashMap:是基于哈希表的Map接口实现。
     8  * 哈希表的作用是用来保证键的唯一性的。
     9  * 
    10  * HashMap<String,String>
    11  * 键:String
    12  * 值:String
    13  */
    14 public class HashMapDemo {
    15     public static void main(String[] args) {
    16         // 创建集合对象
    17         HashMap<String, String> hm = new HashMap<String, String>();
    18 
    19         // 创建元素并添加元素
    20         // String key1 = "it001";
    21         // String value1 = "马云";
    22         // hm.put(key1, value1);
    23 
    24         hm.put("it001", "马云");
    25         hm.put("it003", "马化腾");
    26         hm.put("it004", "乔布斯");
    27         hm.put("it005", "张朝阳");
    28         hm.put("it002", "裘伯君"); // wps
    29         hm.put("it001", "比尔盖茨");
    30 
    31         // 遍历
    32         Set<String> set = hm.keySet();
    33         for (String key : set) {
    34             String value = hm.get(key);
    35             System.out.println(key + "---" + value);
    36         }
    37     }
    38 }

    6、HashMap集合键是Integer值是String的案例

     1 package cn.itcast_02;
     2 
     3 import java.util.HashMap;
     4 import java.util.Set;
     5 
     6 /*
     7  * HashMap<Integer,String>
     8  * 键:Integer
     9  * 值:String
    10  */
    11 public class HashMapDemo2 {
    12     public static void main(String[] args) {
    13         // 创建集合对象
    14         HashMap<Integer, String> hm = new HashMap<Integer, String>();
    15 
    16         // 创建元素并添加元素
    17         // Integer i = new Integer(27);
    18         // Integer i = 27;
    19         // String s = "林青霞";
    20         // hm.put(i, s);
    21 
    22         hm.put(27, "林青霞");
    23         hm.put(30, "风清扬");
    24         hm.put(28, "刘意");
    25         hm.put(29, "林青霞");
    26 
    27         // 下面的写法是八进制,但是不能出现8以上的单个数据
    28         // hm.put(003, "hello");
    29         // hm.put(006, "hello");
    30         // hm.put(007, "hello");
    31         // hm.put(008, "hello");
    32 
    33         // 遍历
    34         Set<Integer> set = hm.keySet();
    35         for (Integer key : set) {
    36             String value = hm.get(key);
    37             System.out.println(key + "---" + value);
    38         }
    39 
    40         // 下面这种方式仅仅是集合的元素的字符串表示
    41         // System.out.println("hm:" + hm);
    42     }
    43 }

    7、HashMap集合键是String值是Student的案例

     1 package cn.itcast_02;
     2 
     3 import java.util.HashMap;
     4 import java.util.Set;
     5 
     6 /*
     7  * HashMap<String,Student>
     8  * 键:String    学号
     9  * 值:Student 学生对象
    10  */
    11 public class HashMapDemo3 {
    12     public static void main(String[] args) {
    13         // 创建集合对象
    14         HashMap<String, Student> hm = new HashMap<String, Student>();
    15 
    16         // 创建学生对象
    17         Student s1 = new Student("周星驰", 58);
    18         Student s2 = new Student("刘德华", 55);
    19         Student s3 = new Student("梁朝伟", 54);
    20         Student s4 = new Student("刘嘉玲", 50);
    21 
    22         // 添加元素
    23         hm.put("9527", s1);
    24         hm.put("9522", s2);
    25         hm.put("9524", s3);
    26         hm.put("9529", s4);
    27 
    28         // 遍历
    29         Set<String> set = hm.keySet();
    30         for (String key : set) {
    31             // 注意了:这次值不是字符串了
    32             // String value = hm.get(key);
    33             Student value = hm.get(key);
    34             System.out.println(key + "---" + value.getName() + "---"
    35                     + value.getAge());
    36         }
    37     }
    38 }

    8、HashMap集合键是Student值是String的案例

     1 package cn.itcast_02;
     2 
     3 public class Student {
     4     private String name;
     5     private int age;
     6 
     7     public Student() {
     8         super();
     9     }
    10 
    11     public Student(String name, int age) {
    12         super();
    13         this.name = name;
    14         this.age = age;
    15     }
    16 
    17     public String getName() {
    18         return name;
    19     }
    20 
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24 
    25     public int getAge() {
    26         return age;
    27     }
    28 
    29     public void setAge(int age) {
    30         this.age = age;
    31     }
    32 
    33     @Override
    34     public int hashCode() {
    35         final int prime = 31;
    36         int result = 1;
    37         result = prime * result + age;
    38         result = prime * result + ((name == null) ? 0 : name.hashCode());
    39         return result;
    40     }
    41 
    42     @Override
    43     public boolean equals(Object obj) {
    44         if (this == obj)
    45             return true;
    46         if (obj == null)
    47             return false;
    48         if (getClass() != obj.getClass())
    49             return false;
    50         Student other = (Student) obj;
    51         if (age != other.age)
    52             return false;
    53         if (name == null) {
    54             if (other.name != null)
    55                 return false;
    56         } else if (!name.equals(other.name))
    57             return false;
    58         return true;
    59     }
    60 
    61 }
     1 package cn.itcast_02;
     2 
     3 import java.util.HashMap;
     4 import java.util.Set;
     5 
     6 /*
     7  * HashMap<Student,String>
     8  * 键:Student
     9  *         要求:如果两个对象的成员变量值都相同,则为同一个对象。
    10  * 值:String
    11  */
    12 public class HashMapDemo4 {
    13     public static void main(String[] args) {
    14         // 创建集合对象
    15         HashMap<Student, String> hm = new HashMap<Student, String>();
    16 
    17         // 创建学生对象
    18         Student s1 = new Student("貂蝉", 27);
    19         Student s2 = new Student("王昭君", 30);
    20         Student s3 = new Student("西施", 33);
    21         Student s4 = new Student("杨玉环", 35);
    22         Student s5 = new Student("貂蝉", 27);
    23 
    24         // 添加元素
    25         hm.put(s1, "8888");
    26         hm.put(s2, "6666");
    27         hm.put(s3, "5555");
    28         hm.put(s4, "7777");
    29         hm.put(s5, "9999");
    30 
    31         // 遍历
    32         Set<Student> set = hm.keySet();
    33         for (Student key : set) {
    34             String value = hm.get(key);
    35             System.out.println(key.getName() + "---" + key.getAge() + "---"
    36                     + value);
    37         }
    38     }
    39 }

    9、LinkedHashMap的概述和使用

     1 package cn.itcast_03;
     2 
     3 import java.util.LinkedHashMap;
     4 import java.util.Set;
     5 
     6 /*
     7  * LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。
     8  * 由哈希表保证键的唯一性
     9  * 由链表保证键盘的有序(存储和取出的顺序一致)
    10  */
    11 public class LinkedHashMapDemo {
    12     public static void main(String[] args) {
    13         // 创建集合对象
    14         LinkedHashMap<String, String> hm = new LinkedHashMap<String, String>();
    15 
    16         // 创建并添加元素
    17         hm.put("2345", "hello");
    18         hm.put("1234", "world");
    19         hm.put("3456", "java");
    20         hm.put("1234", "javaee");
    21         hm.put("3456", "android");
    22 
    23         // 遍历
    24         Set<String> set = hm.keySet();
    25         for (String key : set) {
    26             String value = hm.get(key);
    27             System.out.println(key + "---" + value);
    28         }
    29     }
    30 }

    10、TreeMap集合键是String值是String的案例

     1 package cn.itcast_04;
     2 
     3 import java.util.Set;
     4 import java.util.TreeMap;
     5 
     6 /*
     7  * TreeMap:是基于红黑树的Map接口的实现。
     8  * 
     9  * HashMap<String,String>
    10  * 键:String
    11  * 值:String
    12  */
    13 public class TreeMapDemo {
    14     public static void main(String[] args) {
    15         // 创建集合对象
    16         TreeMap<String, String> tm = new TreeMap<String, String>();
    17 
    18         // 创建元素并添加元素
    19         tm.put("hello", "你好");
    20         tm.put("world", "世界");
    21         tm.put("java", "爪哇");
    22         tm.put("world", "世界2");
    23         tm.put("javaee", "爪哇EE");
    24 
    25         // 遍历集合
    26         Set<String> set = tm.keySet();
    27         for (String key : set) {
    28             String value = tm.get(key);
    29             System.out.println(key + "---" + value);
    30         }
    31     }
    32 }

    11、TreeMap集合键是Student值是String的案例

     1 package cn.itcast_04;
     2 
     3 import java.util.Comparator;
     4 import java.util.Set;
     5 import java.util.TreeMap;
     6 
     7 /*
     8  * TreeMap<Student,String>
     9  * 键:Student
    10  * 值:String
    11  */
    12 public class TreeMapDemo2 {
    13     public static void main(String[] args) {
    14         // 创建集合对象
    15         TreeMap<Student, String> tm = new TreeMap<Student, String>(
    16                 new Comparator<Student>() {
    17                     @Override
    18                     public int compare(Student s1, Student s2) {
    19                         // 主要条件
    20                         int num = s1.getAge() - s2.getAge();
    21                         // 次要条件
    22                         int num2 = num == 0 ? s1.getName().compareTo(
    23                                 s2.getName()) : num;
    24                         return num2;
    25                     }
    26                 });
    27 
    28         // 创建学生对象
    29         Student s1 = new Student("潘安", 30);
    30         Student s2 = new Student("柳下惠", 35);
    31         Student s3 = new Student("唐伯虎", 33);
    32         Student s4 = new Student("燕青", 32);
    33         Student s5 = new Student("唐伯虎", 33);
    34 
    35         // 存储元素
    36         tm.put(s1, "宋朝");
    37         tm.put(s2, "元朝");
    38         tm.put(s3, "明朝");
    39         tm.put(s4, "清朝");
    40         tm.put(s5, "汉朝");
    41 
    42         // 遍历
    43         Set<Student> set = tm.keySet();
    44         for (Student key : set) {
    45             String value = tm.get(key);
    46             System.out.println(key.getName() + "---" + key.getAge() + "---"
    47                     + value);
    48         }
    49     }
    50 }

    12、统计字符串中每个字符出现的次数案例图解及代码实现

     1 package cn.itcast_05;
     2 
     3 import java.util.Scanner;
     4 import java.util.Set;
     5 import java.util.TreeMap;
     6 
     7 /*
     8  * 需求 :"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
     9  * 
    10  * 分析:
    11  *         A:定义一个字符串(可以改进为键盘录入)
    12  *         B:定义一个TreeMap集合
    13  *             键:Character
    14  *             值:Integer
    15  *         C:把字符串转换为字符数组
    16  *         D:遍历字符数组,得到每一个字符
    17  *         E:拿刚才得到的字符作为键到集合中去找值,看返回值
    18  *             是null:说明该键不存在,就把该字符作为键,1作为值存储
    19  *             不是null:说明该键存在,就把值加1,然后重写存储该键和值
    20  *         F:定义字符串缓冲区变量
    21  *         G:遍历集合,得到键和值,进行按照要求拼接
    22  *         H:把字符串缓冲区转换为字符串输出
    23  * 
    24  * 录入:linqingxia
    25  * 结果:result:a(1)g(1)i(3)l(1)n(2)q(1)x(1)
    26  */
    27 public class TreeMapDemo {
    28     public static void main(String[] args) {
    29         // 定义一个字符串(可以改进为键盘录入)
    30         Scanner sc = new Scanner(System.in);
    31         System.out.println("请输入一个字符串:");
    32         String line = sc.nextLine();
    33 
    34         // 定义一个TreeMap集合
    35         TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
    36         
    37         //把字符串转换为字符数组
    38         char[] chs = line.toCharArray();
    39         
    40         //遍历字符数组,得到每一个字符
    41         for(char ch : chs){
    42             //拿刚才得到的字符作为键到集合中去找值,看返回值
    43             Integer i =  tm.get(ch);
    44             
    45             //是null:说明该键不存在,就把该字符作为键,1作为值存储
    46             if(i == null){
    47                 tm.put(ch, 1);
    48             }else {
    49                 //不是null:说明该键存在,就把值加1,然后重写存储该键和值
    50                 i++;
    51                 tm.put(ch,i);
    52             }
    53         }
    54         
    55         //定义字符串缓冲区变量
    56         StringBuilder sb=  new StringBuilder();
    57         
    58         //遍历集合,得到键和值,进行按照要求拼接
    59         Set<Character> set = tm.keySet();
    60         for(Character key : set){
    61             Integer value = tm.get(key);
    62             sb.append(key).append("(").append(value).append(")");
    63         }
    64         
    65         //把字符串缓冲区转换为字符串输出
    66         String result = sb.toString();
    67         System.out.println("result:"+result);
    68     }
    69 }

    13、HashMap集合嵌套HashMap集合的案例

     1 package cn.itcast_05;
     2 
     3 import java.util.HashMap;
     4 import java.util.Set;
     5 
     6 /*
     7  * HashMap嵌套HashMap
     8  * 
     9  * 传智播客
    10  *         jc    基础班
    11  *                 陈玉楼        20
    12  *                 高跃        22
    13  *         jy    就业班
    14  *                 李杰        21
    15  *                 曹石磊        23
    16  * 
    17  * 先存储元素,然后遍历元素
    18  */
    19 public class HashMapDemo2 {
    20     public static void main(String[] args) {
    21         // 创建集合对象
    22         HashMap<String, HashMap<String, Integer>> czbkMap = new HashMap<String, HashMap<String, Integer>>();
    23 
    24         // 创建基础班集合对象
    25         HashMap<String, Integer> jcMap = new HashMap<String, Integer>();
    26         // 添加元素
    27         jcMap.put("陈玉楼", 20);
    28         jcMap.put("高跃", 22);
    29         // 把基础班添加到大集合
    30         czbkMap.put("jc", jcMap);
    31 
    32         // 创建就业班集合对象
    33         HashMap<String, Integer> jyMap = new HashMap<String, Integer>();
    34         // 添加元素
    35         jyMap.put("李杰", 21);
    36         jyMap.put("曹石磊", 23);
    37         // 把基础班添加到大集合
    38         czbkMap.put("jy", jyMap);
    39         
    40         //遍历集合
    41         Set<String> czbkMapSet = czbkMap.keySet();
    42         for(String czbkMapKey : czbkMapSet){
    43             System.out.println(czbkMapKey);
    44             HashMap<String, Integer> czbkMapValue = czbkMap.get(czbkMapKey);
    45             Set<String> czbkMapValueSet = czbkMapValue.keySet();
    46             for(String czbkMapValueKey : czbkMapValueSet){
    47                 Integer czbkMapValueValue = czbkMapValue.get(czbkMapValueKey);
    48                 System.out.println("	"+czbkMapValueKey+"---"+czbkMapValueValue);
    49             }
    50         }
    51     }
    52 }

    14、HashMap集合嵌套ArrayList集合的案例

     1 package cn.itcast_05;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashMap;
     5 import java.util.Set;
     6 
     7 /*
     8  *需求:
     9  *假设HashMap集合的元素是ArrayList。有3个。
    10  *每一个ArrayList集合的值是字符串。
    11  *元素我已经完成,请遍历。
    12  *结果:
    13  *         三国演义
    14  *             吕布
    15  *             周瑜
    16  *         笑傲江湖
    17  *             令狐冲
    18  *             林平之
    19  *         神雕侠侣
    20  *             郭靖
    21  *             杨过  
    22  */
    23 public class HashMapIncludeArrayListDemo {
    24     public static void main(String[] args) {
    25         // 创建集合对象
    26         HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
    27 
    28         // 创建元素集合1
    29         ArrayList<String> array1 = new ArrayList<String>();
    30         array1.add("吕布");
    31         array1.add("周瑜");
    32         hm.put("三国演义", array1);
    33 
    34         // 创建元素集合2
    35         ArrayList<String> array2 = new ArrayList<String>();
    36         array2.add("令狐冲");
    37         array2.add("林平之");
    38         hm.put("笑傲江湖", array2);
    39 
    40         // 创建元素集合3
    41         ArrayList<String> array3 = new ArrayList<String>();
    42         array3.add("郭靖");
    43         array3.add("杨过");
    44         hm.put("神雕侠侣", array3);
    45         
    46         //遍历集合
    47         Set<String> set = hm.keySet();
    48         for(String key : set){
    49             System.out.println(key);
    50             ArrayList<String> value = hm.get(key);
    51             for(String s : value){
    52                 System.out.println("	"+s);
    53             }
    54         }
    55     }
    56 }

    15、ArrayList集合嵌套HashMap集合的案例

     1 package cn.itcast_05;
     2 
     3 import java.util.ArrayList;
     4 import java.util.HashMap;
     5 import java.util.Set;
     6 
     7 /*
     8  ArrayList集合嵌套HashMap集合并遍历。
     9  需求:
    10  假设ArrayList集合的元素是HashMap。有3个。
    11  每一个HashMap集合的键和值都是字符串。
    12  元素我已经完成,请遍历。
    13  结果:
    14  周瑜---小乔
    15  吕布---貂蝉
    16 
    17  郭靖---黄蓉
    18  杨过---小龙女
    19 
    20  令狐冲---任盈盈
    21  林平之---岳灵珊
    22  */
    23 public class ArrayListIncludeHashMapDemo {
    24     public static void main(String[] args) {
    25         // 创建集合对象
    26         ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
    27 
    28         // 创建元素1
    29         HashMap<String, String> hm1 = new HashMap<String, String>();
    30         hm1.put("周瑜", "小乔");
    31         hm1.put("吕布", "貂蝉");
    32         // 把元素添加到array里面
    33         array.add(hm1);
    34 
    35         // 创建元素1
    36         HashMap<String, String> hm2 = new HashMap<String, String>();
    37         hm2.put("郭靖", "黄蓉");
    38         hm2.put("杨过", "小龙女");
    39         // 把元素添加到array里面
    40         array.add(hm2);
    41 
    42         // 创建元素1
    43         HashMap<String, String> hm3 = new HashMap<String, String>();
    44         hm3.put("令狐冲", "任盈盈");
    45         hm3.put("林平之", "岳灵珊");
    46         // 把元素添加到array里面
    47         array.add(hm3);
    48 
    49         // 遍历
    50         for (HashMap<String, String> hm : array) {
    51             Set<String> set = hm.keySet();
    52             for (String key : set) {
    53                 String value = hm.get(key);
    54                 System.out.println(key + "---" + value);
    55             }
    56         }
    57     }
    58 }

    16、HashMap和Hashtable的区别

     1 package cn.itcast_07;
     2 
     3 import java.util.Hashtable;
     4 
     5 /*
     6  * 1:Hashtable和HashMap的区别?
     7  * Hashtable:线程安全,效率低。不允许null键和null值
     8  * HashMap:线程不安全,效率高。允许null键和null值
     9  * 
    10  * 2:List,Set,Map等接口是否都继承子Map接口?
    11  * List,Set不是继承自Map接口,它们继承自Collection接口
    12  * Map接口本身就是一个顶层接口
    13  */
    14 public class HashtableDemo {
    15     public static void main(String[] args) {
    16         // HashMap<String, String> hm = new HashMap<String, String>();
    17         Hashtable<String, String> hm = new Hashtable<String, String>();
    18 
    19         hm.put("it001", "hello");
    20         // hm.put(null, "world"); //NullPointerException
    21         // hm.put("java", null); // NullPointerException
    22 
    23         System.out.println(hm);
    24     }
    25 }

    17、Collections工具类的常见方法

     1 package cn.itcast_01;
     2 
     3 import java.util.Collections;
     4 import java.util.List;
     5 import java.util.ArrayList;
     6 
     7 /*
     8  * Collections:是针对集合进行操作的工具类,都是静态方法。
     9  * 
    10  * 面试题:
    11  * Collection和Collections的区别?
    12  * Collection:是单列集合的顶层接口,有子接口List和Set。
    13  * Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法
    14  * 
    15  * 要知道的方法
    16  * public static <T> void sort(List<T> list):排序 默认情况下是自然顺序。
    17  * public static <T> int binarySearch(List<?> list,T key):二分查找
    18  * public static <T> T max(Collection<?> coll):最大值
    19  * public static void reverse(List<?> list):反转
    20  * public static void shuffle(List<?> list):随机置换
    21  */
    22 public class CollectionsDemo {
    23     public static void main(String[] args) {
    24         // 创建集合对象
    25         List<Integer> list = new ArrayList<Integer>();
    26 
    27         // 添加元素
    28         list.add(30);
    29         list.add(20);
    30         list.add(50);
    31         list.add(10);
    32         list.add(40);
    33 
    34         System.out.println("list:" + list);
    35 
    36         // public static <T> void sort(List<T> list):排序 默认情况下是自然顺序。
    37         // Collections.sort(list);
    38         // System.out.println("list:" + list);
    39         // [10, 20, 30, 40, 50]
    40 
    41         // public static <T> int binarySearch(List<?> list,T key):二分查找
    42         // System.out
    43         // .println("binarySearch:" + Collections.binarySearch(list, 30));
    44         // System.out.println("binarySearch:"
    45         // + Collections.binarySearch(list, 300));
    46 
    47         // public static <T> T max(Collection<?> coll):最大值
    48         // System.out.println("max:"+Collections.max(list));
    49 
    50         // public static void reverse(List<?> list):反转
    51         // Collections.reverse(list);
    52         // System.out.println("list:" + list);
    53         
    54         //public static void shuffle(List<?> list):随机置换
    55         Collections.shuffle(list);
    56         System.out.println("list:" + list);
    57     }
    58 }

    18、ArrayList存储自定义对象并排序案例

     1 package cn.itcast_02;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collections;
     5 import java.util.Comparator;
     6 import java.util.List;
     7 
     8 /*
     9  * Collections可以针对ArrayList存储基本包装类的元素排序,存储自定义对象可不可以排序呢?
    10  */
    11 public class CollectionsDemo {
    12     public static void main(String[] args) {
    13         // 创建集合对象
    14         List<Student> list = new ArrayList<Student>();
    15 
    16         // 创建学生对象
    17         Student s1 = new Student("林青霞", 27);
    18         Student s2 = new Student("风清扬", 30);
    19         Student s3 = new Student("刘晓曲", 28);
    20         Student s4 = new Student("武鑫", 29);
    21         Student s5 = new Student("林青霞", 27);
    22 
    23         // 添加元素对象
    24         list.add(s1);
    25         list.add(s2);
    26         list.add(s3);
    27         list.add(s4);
    28         list.add(s5);
    29 
    30         // 排序
    31         // 自然排序
    32         // Collections.sort(list);
    33         // 比较器排序
    34         // 如果同时有自然排序和比较器排序,以比较器排序为主
    35         Collections.sort(list, new Comparator<Student>() {
    36             @Override
    37             public int compare(Student s1, Student s2) {
    38                 int num = s2.getAge() - s1.getAge();
    39                 int num2 = num == 0 ? s1.getName().compareTo(s2.getName())
    40                         : num;
    41                 return num2;
    42             }
    43         });
    44 
    45         // 遍历集合
    46         for (Student s : list) {
    47             System.out.println(s.getName() + "---" + s.getAge());
    48         }
    49     }
    50 }

    19、HashMap、ArrayList、TreeSet的具体应用

     1 package cn.itcast_04;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collections;
     5 import java.util.HashMap;
     6 import java.util.TreeSet;
     7 
     8 /*
     9  * 思路:
    10  *         A:创建一个HashMap集合
    11  *         B:创建一个ArrayList集合
    12  *         C:创建花色数组和点数数组
    13  *         D:从0开始往HashMap里面存储编号,并存储对应的牌
    14  *        同时往ArrayList里面存储编号即可。
    15  *      E:洗牌(洗的是编号)
    16  *      F:发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
    17  *      G:看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
    18  */
    19 public class PokerDemo {
    20     public static void main(String[] args) {
    21         // 创建一个HashMap集合
    22         HashMap<Integer, String> hm = new HashMap<Integer, String>();
    23 
    24         // 创建一个ArrayList集合
    25         ArrayList<Integer> array = new ArrayList<Integer>();
    26 
    27         // 创建花色数组和点数数组
    28         // 定义一个花色数组
    29         String[] colors = { "♠", "♥", "♣", "♦" };
    30         // 定义一个点数数组
    31         String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
    32                 "K", "A", "2", };
    33 
    34         // 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。
    35         int index = 0;
    36 
    37         for (String number : numbers) {
    38             for (String color : colors) {
    39                 String poker = color.concat(number);
    40                 hm.put(index, poker);
    41                 array.add(index);
    42                 index++;
    43             }
    44         }
    45         hm.put(index, "小王");
    46         array.add(index);
    47         index++;
    48         hm.put(index, "大王");
    49         array.add(index);
    50 
    51         // 洗牌(洗的是编号)
    52         Collections.shuffle(array);
    53 
    54         // 发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
    55         TreeSet<Integer> fengQingYang = new TreeSet<Integer>();
    56         TreeSet<Integer> linQingXia = new TreeSet<Integer>();
    57         TreeSet<Integer> liuYi = new TreeSet<Integer>();
    58         TreeSet<Integer> diPai = new TreeSet<Integer>();
    59 
    60         for (int x = 0; x < array.size(); x++) {
    61             if (x >= array.size() - 3) {
    62                 diPai.add(array.get(x));
    63             } else if (x % 3 == 0) {
    64                 fengQingYang.add(array.get(x));
    65             } else if (x % 3 == 1) {
    66                 linQingXia.add(array.get(x));
    67             } else if (x % 3 == 2) {
    68                 liuYi.add(array.get(x));
    69             }
    70         }
    71 
    72         // 看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
    73         lookPoker("风清扬", fengQingYang, hm);
    74         lookPoker("林青霞", linQingXia, hm);
    75         lookPoker("刘意", liuYi, hm);
    76         lookPoker("底牌", diPai, hm);
    77     }
    78 
    79     // 写看牌的功能
    80     public static void lookPoker(String name, TreeSet<Integer> ts,
    81             HashMap<Integer, String> hm) {
    82         System.out.print(name + "的牌是:");
    83         for (Integer key : ts) {
    84             String value = hm.get(key);
    85             System.out.print(value + " ");
    86         }
    87         System.out.println();
    88     }
    89 }
    如欢如殇 授以青春鲜活肢体奔忙 如思如忘 驱以老朽深沉灵魂冥想 始自情热激荡 从未敢终于世事炎凉 无能执手相望 无法去尝试结发同床 无力至心死身僵 一息坚强 ------ 我一直没有放弃,如果你也能看到 修身 修禅
  • 相关阅读:
    Jessica's Reading Problem POJ
    FatMouse and Cheese HDU
    How many ways HDU
    Humble Numbers HDU
    Doing Homework again
    Stacks of Flapjacks UVA
    Party Games UVA
    24. 两两交换链表中的节点
    面试题 03.04. 化栈为队
    999. 可以被一步捕获的棋子数
  • 原文地址:https://www.cnblogs.com/lz2lhy/p/6923885.html
Copyright © 2020-2023  润新知