第十七章 Java的容器(Map)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十七章 Java的容器(Map)相关的知识,希望对你有一定的参考价值。

1.依赖Hash表的集合(HashSet,LinkedHashSet,HashMap,LinkedHashMap)都是由HashCode()和equals()方法保证唯一性

自定义对象要重写HashCode()和equals()方法

TreeSet和TreeMap是基于二叉树和红黑树的实现,实现Comparable或者Comparator接口来排序并且保证了唯一性

 1 package cn.itcast_02;
 2 
 3 import java.util.Collection;
 4 import java.util.HashMap;
 5 import java.util.Map;
 6 import java.util.Map.Entry;
 7 import java.util.Set;
 8 
 9 /*Map集合的功能概述:
10  * 1.添加功能:V put(K key,V value):添加元素
11  *         key不存在就直接存储,返回null;key存在就将值覆盖并返回以前的value
12  * 2.删除功能:void clear():移除所有的键值对元素
13  *             V remove(Object key):根据键删除键值对元素,并把值返回
14  * 3.判断功能:boolean containsKey(Object key):判断集合是否包含指定的键
15  *             boolean containsValue(Object value):判断集合是否包含指定的值
16  *             boolean isEmpty():判断集合是否为空
17  * 4.获取功能:Set<Map.Entry<K,V>> entrySet():???
18  *             V get(Object key):根据键获取值
19  *             Set<K> keySet():获取集合中所有键的集合
20  *             Collection<V> values():获取集合中所有值的集合
21  * 5.长度功能:int size():返回集合中的键值对的对数
22  * 
23  */
24 public class MapDemo {
25     public static void main(String[] args) {
26         /*Map<Integer, String> map = new HashMap<>();
27         //添加元素
28         System.out.println(map.put(1, "hello"));//null
29         System.out.println(map.put(1, "world"));//hello
30         //移除元素
31         System.out.println(map.remove(1));//world
32 */        
33         Map<String, String> map = new HashMap<>();
34         map.put("张三", "aaa");
35         map.put("张三", "aaa");
36         map.put("李四", "bbb");
37         map.put("王五", "ccc");
38         map.put("马六", "ddd");
39         map.put("红旗", "eee");
40         //根据键来获取值(V get(Object key))
41         /*System.out.println(map.get("张三"));//aaa
42         System.out.println(map.get("李四"));//bbb
43 */        //获取所有键的集合(Set<K> keySet())
44         Set<String> set = map.keySet();
45         for (String s : set) {
46             //System.out.println(s);
47             System.out.println(map.get(s));
48         }
49         System.out.println("-----------");
50         //获取所有值的集合
51         Collection<String> con = map.values();
52         for (String string : con) {
53             System.out.println(string);
54         }
55         System.out.println("---------");
56         //获取所有键值对的对象集合
57         Set<Map.Entry<String, String>> entries = map.entrySet();
58         for (Entry<String, String> entry : entries) {
59             String key = entry.getKey();
60             String value = entry.getValue();
61             System.out.println(key+"--"+value);
62         }
63     }
64 }

2.LinkedHashMap<K,V>是map接口的哈希表和链表实现,哈希表保证键的唯一,链表保证存取一致,键是自定义对象时要重写

HashCode()和equals()方法

3.TreeMap是基于红黑树的Map接口的实现

 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 }
 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 }

 

以上是关于第十七章 Java的容器(Map)的主要内容,如果未能解决你的问题,请参考以下文章

第十七章 Java的容器

读构建之法第十七章有感(作业四)

“全栈2019”Java第十七章:赋值运算符和算术运算符

第十七章.网络编程

《构建之法》读第十七章收获

《构建之法》(第十七章)读书笔记