Hashmap和hashSet

2-10 晚11点开始讨论 
有关hashset hashmap的知识点 

注意:线程同步,两者区别,查询机制,映射机制,源码剖析 

Map

    Map是一种典型的名值对类型,它提供一种Key-Value对应保存的数据结构。我们通过Key值来访问对应的Value。和Java集合类里头其他的类不太一样,这个接口并没有继承Collection这接口。而其他的类或者接口不管是List, Set, Stack等都继承了Collection。从这一点来说,它有点像一个异类。

    从前面的这部分讨论,我们可以简单的归类一下Map接口里面定义的常用操作。最常见的两种操作方法是get, put方法。get方法用于根据Key来取得所需要的Value值,而put方法用于根据特定的Key来放置对应的Value。除了这两个方法以外还有判断Key,Value是否存在的containsKey, containsValue方法。



Set

    Set接口里面主要定义了常用的集合操作方法,包括添加元素,判断元素是否在里面和对元素过滤。常用的几个方法如下:

 

方法名方法详细定义说明
containsboolean contains(Object o);判断元素是否存在
addboolean add(E e);添加元素
removeboolean remove(Object o);删除元素
retainAllboolean retainAll(Collection<?> c);过滤元素

    我们知道,集合里面要求保存的元素是不能重复的,所以它里面所有的元素都是唯一的。它的定义就有点不太一样。

HashSet

    HashSet是基于HashMap实现的,在它内部有如下的定义:

Java代码   收藏代码
  1. private transient HashMap<E,Object> map;  
  2.   
  3. // Dummy value to associate with an Object in the backing Map  
  4. private static final Object PRESENT = new Object();  

    在它里面放置的元素都应到map里面的key部分,而在map中与key对应的value用一个Object()对象保存。因为内部是大量借用HashMap的实现,它本身不过是调用HashMap的一个代理,这些基本方法的实现就显得很简单:

Java代码   收藏代码
  1. public boolean add(E e) {  
  2.         return map.put(e, PRESENT)==null;  
  3.     }  
  4.   
  5. public boolean remove(Object o) {  
  6.         return map.remove(o)==PRESENT;  
  7.     }  
  8.   
  9. public boolean contains(Object o) {  
  10.         return map.containsKey(o);  
  11.     }  




HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为Set接口,List接口和Queue接口。它们有各自的特点,Set的集合里不允许对象有重复的值,List允许有重复,它对集合中的对象进行索引,Queue的工作原理是FCFS算法(First Come, First Serve)。


HashSet和HashMap的区别

*HashMap**HashSet*
HashMap实现了Map接口HashSet实现了Set接口
HashMap储存键值对HashSet仅仅存储对象
使用put()方法将元素放入map中使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
HashMap比较快,因为是使用唯一的键来获取对象HashSet较HashMap来说比较慢



推荐博客: 

http://sauzny.iteye.com/blog/2020275 
http://www.importnew.com/6931.html 
https://zhidao.baidu.com/question/343007995.html 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值