0基础学java_Java类集之Map接口

Map接口

Collection操作之前已经发现,每次保存的对象都是一个对象。但是在Map中保存的是一对对象,以keyàvalue的形式保存。

Map接口常用子类:

HashMap:无序存放的,是新的操作类,key不允许重复

HashTable: 无序存放的,是旧的操作类,key不允许重复

TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复

WeakHashMap:弱引用的Map集合,当集合中某些内容不再被引用时,可以清除掉无用的数据,可以使用GC进行回收

IdetityHashMap:key可以重复的Map集合

举例:向Map集合中插入数据

 1 package com.feimao.a1;
 2 
 3 
 4 
 5 import java.util.HashMap;
 6 
 7 
 8 
 9 public class HashMapDemo01 {
10 
11     public static void main(String args[]){
12 
13         HashMap<String , String> h = new HashMap<String , String>();
14 
15         h.put("feimao" , "zhubaobao");
16 
17         h.put("xiao" , "taotao");
18 
19         h.put("Hash" , "Demo");
20 
21         String s = h.get("xiao");
22 
23         System.out.println("取出的内容 :" + s);
24 
25     }
26 
27 }

 

举例:在Map中使用contains方法()判断key和value的值是否存在

 1 package com.feimao.a1;
 2 
 3 
 4 
 5 import java.util.HashMap;
 6 
 7 
 8 
 9 public class HashMapDemo01 {
10 
11     public static void main(String args[]){
12 
13         HashMap<String , String> h = new HashMap<String , String>();
14 
15         h.put("feimao" , "zhubaobao");
16 
17         h.put("xiao" , "taotao");
18 
19         h.put("Hash" , "Demo");
20 
21      /*   String s = h.get("xiao");
22 
23         System.out.println("取出的内容 :" + s);*/
24 
25         if(h.containsKey("feimao")){
26 
27             System.out.println("搜索的key存在!");
28 
29         }else{
30 
31             System.out.println("搜索的key不存在");
32 
33         }
34 
35         if(h.containsValue("taotao1")){
36 
37             System.out.println("搜索的value存在!");
38 
39         }else{
40 
41             System.out.println("搜索的value不存在!");
42 
43         }
44 
45     }
46 
47 }

 

HashMap和Hashtable的区别

 

两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。

Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些,我们平时使用时若无特殊需求建议使用HashMap,在多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合(Collections.synchronizedMap()实现原理是Collections定义了一个SynchronizedMap的内部类,这个类实现了Map接口,在调用方法时使用synchronized来保证线程同步,当然了实际上操作的还是我们传入的HashMap实例,简单的说就是Collections.synchronizedMap()方法帮我们在操作HashMap时自动添加了synchronized来实现线程同步,类似的其它Collections.synchronizedXX方法也是类似原理。

HashMap可以使用null作为key,不过建议还是尽量避免这样使用。HashMap以null作为key时,总是存储在table数组的第一个节点上。而Hashtable则不允许null作为key。

HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。

HashMap扩容时是当前容量翻倍即:capacity*2,Hashtable扩容时是容量翻倍+1即:capacity*2+1。

HashMap和Hashtable的底层实现都是数组+链表结构实现。

posted @ 2018-11-14 00:40  肥猫与猪宝宝  阅读(149)  评论(0编辑  收藏  举报