zoukankan      html  css  js  c++  java
  • 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 }
    如欢如殇 授以青春鲜活肢体奔忙 如思如忘 驱以老朽深沉灵魂冥想 始自情热激荡 从未敢终于世事炎凉 无能执手相望 无法去尝试结发同床 无力至心死身僵 一息坚强 ------ 我一直没有放弃,如果你也能看到 修身 修禅
  • 相关阅读:
    int,long int,short int所占字节
    NSArray Sort
    Foundation Kit
    界面构建
    主题存放问题
    ObjectiveC中委托和协议
    IOS中编码转换方法(转)
    螺旋队列
    如何在多台机器上共享IOS证书
    Xcode 中使用Github
  • 原文地址:https://www.cnblogs.com/lz2lhy/p/6923885.html
Copyright © 2011-2022 走看看