JAVA-集合-Map

 1 package test;
 2 
 3 import java.util.HashMap;
 4 import java.util.Hashtable;
 5 
 6 public class MapDemo {
 7     public static void main(String[] args) {
 8         /*Map - 映射
 9          *     1.是java中映射的顶级接口
10          *     2.Map是一个容器,这个容器存储的是键值对
11          *     3.一个映射的完成需要这两组值,第一组值称之为Key-键,第二组值称之为Value-值
12          *     4.键是唯一的,每一个键对应一个值。
13          *     5.在映射中,键和值是成对出现的,这种结构就叫键值对。所以一个映射实际上是由多个键值对来组成的
14          *     6.如果存放重复的键,那么对应的值会被代替。
15          *     7.Map不是集合,但是 Map是JAVA集合框架的成员
16          *     8.JAVA集合框架- JAVA Collections Framework
17          *             其包含了数组、集合、映射相关的类以及接口:
18          *                 Collection、Map、Arrays、Collections、Iterator、Comparator、Comparable
19          *     实现类
20          *         HashMap
21          *             1.底层依靠数组+链表结构来存储数据
22          *             4.数组的每一个位置上维系一个链表结构
23          *             5.数组的每一个位置称之为一个bucket - 桶
24          *             2.默认数组的初始容量16,默认加载因子是0.75F
25          *             3.JDK1.8中,如果单个桶中的节点个数超过8个会将链表扭转成一棵红黑树,当节点个数小于7个的时候,会扭转回链表
26          *             4.如果指定了初始容量n,那么  2^x <n<= 2^x+1 , 实际容量就是2^x+1
27          *             5.当已经使用的桶的数量/桶的总数量>加载因子时,就会进行扩容。
28          *             6。每一次扩容增加一倍,底层基于左移来运算
29          *                 扩容完成之后,所有的元素要重新计算重新分布-rehash(扩容)
30          *     减少rehash的次数:
31          *         1.增大初始容量
32          *         2.适当提高加载因子:0.6-0.8
33          *     7.同一个类的同一对象的哈希码一定是相同的,同一个类的不同对象哈希码一般是不同的
34          *     8.元素个数越多的时候,rehash的效率就越慢
35          *     9.加载因子越小,rehash的次数越大,同时导致空间的浪费;加载因子越大,在元素插入的过程中,比较次数越多
36          *     10.键值对在往桶中放的时候,会先和桶中的所有的键值对的键进行比 较;如果键一致,则对应的值覆盖;如果键不一致,则插入到链表的尾部
37          *    11.允许null键和null值
38          *    12. 异步式线程不安全    
39          * */
40             HashMap<Integer,String> H1 = new HashMap<>();
41             H1.put(10,"L");
42             H1.put(12,"因为在一千年以后");    
43             H1.put(11,"世界早已没有我");
44             H1.put(13,"无法深情握着你的手");
45             H1.put(14,"亲吻着你额头");
46             H1.put(10,"K");
47             System.out.println(H1);
48         /*
49          * Hashtable
50          *     1.HashTable是JAVA最早的映射
51          *     2.不允许键和值为null
52          *     3.底层也是依靠数组+链表结构存储
53          *     4.给定的初始容量是多少,那么就是多少
54          *     5.同步式线程安全
55          *     6.默认初始容量是11,默认加载因子是0.75F
56          * */
57             Hashtable<Integer,String> HT = new Hashtable<>();
58             HT.put(1, "越渺小");
59             HT.put(2, "越害怕得到");
60             HT.put(3, "每一次哭");
61             HT.put(4, "每一次哭");
62             HT.put(5, "每一次哭");
63             HT.put(6, "每一次哭");
64             HT.put(7, "每一次哭");
65             HT.put(8, "每一次哭");
66             HT.put(9, "每一次哭");
67             HT.put(10, "每一次哭");
68             HT.put(11, "每一次哭");
69             HT.put(12, "每一次哭");
70             HT.put(13, "每一次哭");
71             HT.put(14, "每一次哭");
72             HT.put(0, "每一次哭");
73             System.out.println(HT);
74 
75             
76     }
77 }

猜你喜欢

转载自www.cnblogs.com/xiaoluohao/p/11641072.html