Java笔记(18):集合框架(04)
Posted 花醉红尘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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接口的哈希表和链接列表实现,具有可预知的迭代顺序。以上是关于Java笔记(18):集合框架(04)的主要内容,如果未能解决你的问题,请参考以下文章