HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架由自己的接口和实现,主要分为set,list和queue接口,它们有各自的特点,set集合中不允许对象有重复的值,list允许有重复的值,它对集合中的对象进行索引,queue的工作原理是FCFS算法,First Come,First Serve。
二者区别
什么是HashSet
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时每一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有存储相同的对象,如果我们没有重写这两个方法,将会使用这个方法的默认实现。
Set添加元素使用add方法,如果添加的值是重复的则会返回false,如果添加的值没有重复,则会返回true。
什么是HashMap
HashMap实现了Map接口,Map接口对键值进行映射,Map中不允许重复的键,Map接口有两个基本的实现,HashMap和TreeMap,TreeMap保存了对象的排列次序,而HashMap不能;HashMap允许键和值为null,HashMap是非synchronized的,而collection提供的方法是可以保证HashMap synchronized,这样在多线程中能保证只有一个线程访问修改map。
如何保证HashMap线程安全
1.使用 java.util.Hashtable 类,此类是线程安全的。
2.使用 java.util.concurrent.ConcurrentHashMap,此类是线程安全的。
3.使用 java.util.Collections.synchronizedMap() 方法包装 HashMap object,得到线程安全的Map,并在此Map上进行操作。
4.自己在程序的关键方法或者代码段加锁,保证安全性,当然这是严重的不推荐。
Map添加的对象的方法是put
网友评论