一天一个类,一点也不累之HashSet

最近忙着一个小项目结题,故没能按时完成【一天一个类,一点也不累】,还好项目优秀,算是对自己一点点的安慰和鼓励。~~~

今天要说的是HashSet

既然是继承自Set,那么就必须有Set的一些属性,比如不能容许有相同(equals)元素的存在.阿门~~ 他也容许有null元素的存在。at most one null element。

【需要注意】 Note that this implementation is not synchronized.  这个也不是线程安全的。

同样感谢,官方给我们提供了线程安全的实现方法。

 Set s = Collections.synchronizedSet(new HashSet(...));

【查看源码才知道--》】原来HashSet内部的实现是使用HashMap。  HashMap还没讲到,敬请期待。。。。

还是看看他的一些方法:

1、构造方法

  HashSet()

 public HashSet() {map = new HashMap<>();}

 

  HashSet(int initialCapacity) //提供指定初始大小的Set集合

1     public HashSet(Collection<? extends E> c) {
2         map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
3         addAll(c);
4     }

  发现如果使用其他容器来实现HashSet,实现之后的大小是原来的3/4+1 ,16二者的最大值

  HashSet(Collection<? extends E> c) 

  HashSet(int initialCapacity, float loadFactor)//指定初始大小,和负载因子(大于0)

2、迭代器

  因为HashSet使用HashMap来实现的,在返回迭代器的时候,是返回keySet.iterator().

  既然这样,问题来了,HashSet只是使用了HashMap中的Key,那他的Value呢???

  请看下面的add方法

3、add

   1 public boolean add(E e) {

  2 return map.put(e, PRESENT)==null;

  3 } 

  添加一个元素,只是在将该元素放入Map的key,value部分使用了一个叫做PRESENT的礼物,who is  PRESENT??

  private static final Object PRESENT = new Object();  定义了一个简单的Object.

4、remove如何实现??

  既然在add中的value== PRESENT

  那就好办了!~~~~

  public boolean remove(Object o) {

    return map.remove(o)==PRESENT;
  }

  so smart~~~

【注】

在java语言中,通过负载因子(load factor)来决定何时对散列表进行再
散列.例如:如果负载因子是0.75,当散列表中已经有75%的位置已经放满,
那么将进行散列.
负载因子越高(越接近1.0),内存的使用率越高,元素的寻找时间越长.
负载因子越低(越接近0.0),元素的寻找时间越短,内存浪费越多.

 

转载于:https://www.cnblogs.com/plxx/p/4467057.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[BZOJ1502]月下柠檬树(自适应辛普森积分)

1502: [NOI2005]月下柠檬树 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1387 Solved: 739[Submit][Status][Discuss]Description 李哲非常非常喜欢柠檬树&#xff0c;特别是在静静的夜晚&#xff0c;当天空中有一弯明月温柔地照亮地面上的景物时&#xff0c;他必会悠闲地…

擎天出口退税软件_新版申报系统退税申报注意事项

前言&#xff1a;随着税务信息化建设“后金三”时代的不断深入,2019年年底国家税务总局启动出口退税管理系统整合(进入金税三期)项目&#xff0c;经过广东、大连两个地区试点&#xff0c;即将于今年年底前在全国完成金税三期审核系统的上线工作&#xff0c;至此&#xff0c;出口…

词性标注

4.10 词性标注 词性用来描写叙述一个词在上下文中的作用。比如描写叙述一个概念的词叫做名词&#xff0c;在下文引用这个名词的词叫做代词。有的词性常常会出现一些新的词&#xff0c;比如名词&#xff0c;这种词性叫做开放式词性。另外一些词性中的词比較固定&#xff0c;比如…

MVCC浅析(转)

在并发读写数据库时&#xff0c;读操作可能会不一致的数据&#xff08;脏读&#xff09;。为了避免这种情况&#xff0c;需要实现数据库的并发访问控制&#xff0c;最简单的方式就是加锁访问。由于&#xff0c;加锁会将读写操作串行化&#xff0c;所以不会出现不一致的状态。但…

关于单链表,二叉树,图,查找和排序的软件编程

课程名称&#xff1a;计算机软件 使用软件&#xff1a;devcpp 注意&#xff1a;这里列出了关于单链表&#xff0c;二叉树&#xff0c;图&#xff0c;查找和排序的编程&#xff0c;全部程序由博主一人编写&#xff0c;会有瑕疵&#xff0c;谨慎使用。 1.单链表 要求&#xff1a;…

pcie 的function_PCIe扫盲——BDF与配置空间

前面的文章中介绍过&#xff0c;每一个PCIe设备可以只有一个功能(Function)&#xff0c;即Fun0。也可以拥有最多8个功能&#xff0c;即多功能设备(Multi-Fun)。不管这个PCIe设备拥有多少个功能&#xff0c;其每一个功能都有一个唯一独立的配置空间(Configuration Space)与之对应…

微信二维码扫描下载APK

前几天给客户制作的app需要上线&#xff0c;生成二维码扫描进行下载&#xff0c;把生成好的apk挂在服务器端&#xff0c;将地址复制下来&#xff0c;通过草料二维码&#xff08;http://cli.im/&#xff09;生成一个二维码它需要一个应用宝ID。上传到应用宝&#xff0c;光审批就…

mysql 字段 as_mysql 字段as详解及实例代码

mysql 字段使用as在mysql中&#xff0c;select查询可以使用AS关键字为查询的字段起一个别名&#xff0c;该别名用作表达式的列名&#xff0c;并且别名可以在GROUP BY&#xff0c;ORDER BY或HAVING等语句中使用。例如&#xff1a;SELECT CONCAT(last_name,, ,first_name) AS ful…

dubbo接口快速测试技巧

在分布式系统的开发中&#xff0c;用到了dubbozookeeper技术&#xff0c;最近遇到一个问题&#xff0c;产品上线后&#xff0c;我负责的模块出了问题&#xff0c;某个bean中某个字段的值一直为null&#xff0c;而这个bean是我调用注册在zookeeper上的一个服务查询到的&#xff…

跳出多重循环 JS

关于如何跳出多重循环loop: //循环标记for(var key in jsonObj){for(var i0;i<jsonObj[key].length;i){if(jsonObj[key][i].password123456){break loop;//跳出双重循环 }}}转载于:https://blog.51cto.com/9381188/1790457

webservice引用spring的bean

1 <jaxws:endpoint address"/test/webservice" implementor"#testBean" /> 这行代码里面的#号表示webservice自动装配到spring的bean。转载于:https://www.cnblogs.com/xiluhua/p/4472544.html

mysql 5.0 数据库_mysql5.0常用命令

MySQL常用操作基本操作&#xff0c;以下都是MySQL5.0下测试通过首先说明下&#xff0c;记住在每个命令结束时加上&#xff1b;(分号)1.导出整个数据库mysqldump -u 用户名 -p --default-character-setlatin1 数据库名 > 导出的文件名(数据库默认编码是latin1)mysqldump -u w…

IISASP.NET 站点IP跳转到域名

前言&#xff1a;先到微软的 https://www.iis.net/downloads/microsoft/url-rewrite 下载URL Rewrite 目标&#xff1a;输入ip跳转到域名所在的网站 比如58的115.159.231.173 跳转到https://passport.58.com/login 先看下58的例子 我们在地址栏输入ip之后 箭头指向的地方是跳转…

java基础五

继承 1. 继承含义 在面向对象编程中&#xff0c;可以通过扩展一个已有的类&#xff0c;并继承该类的属性和行为&#xff0c;来创建一个新的类&#xff0c;这种方式称为继承&#xff08;inheritance&#xff09;. 2. 继承的优点 A&#xff0e;代码的可重用性 B&#xff0e;子类可…

Mac OS X 下Java开发环境配置

首先自己又装的jdk1.8版本目录&#xff1a;/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home待添加。。。转载于:https://blog.51cto.com/jiyanle/1790537

mysql emoji表情_让MySQL支持Emoji表情 mysql 5.6

最近在做微信相关的项目&#xff0c;其中MySQL 要存储emoji表情&#xff0c;因此发现我们常用的utf8 字符集根本无法存储表情。网上有不少替代方案。本人还是采用了修改MySQL字符集的方案简单快捷。首先将我们数据库默认字符集由utf8 更改为utf8mb4&#xff0c;对应的表默认字符…

高效开发iOS系列 -- 那些不为人知的KVC

我的简书地址&#xff1a;http://www.jianshu.com/p/a6a0abac1c4a valueForKeyPath 本篇来解说一下那些不为人知&#xff0c;也常常被忽略掉&#xff0c;而且非常有用的KVC干货小技巧 获取数组里的,最大、最小、平均、求和 NSArray *array ["1","3",2,9.5…

::selection

改变浏览器文字选中背景 ::selection CSS的伪类选择器 只有一小部分CSS属性可以用于::selection选择器&#xff1a; color, background-color, cursor, outline, text-decoration, text-emphasis-color和text-shadow。 要特别注意的是&#xff0c;background-image会如同其他属…

B00013 字符串哈希函数

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值&#xff0c;这个小的二进制值称为哈希值。 哈希函数用途广泛&#xff0c;这个程序给出了绝大多数常用的哈希函数。源程序来自&#xff1a;哈希算法_百度百科。 程序员可以根据自己的需要取用这些代码。 需要注意的…

*hdu5632Rikka with Array

$n \leq 10^300$&#xff0c;问所有$i<j$且$f_i>f_j$的$(i,j),1 \leq i \leq n,1 \leq j \leq n$数量。对某个数取模。 $f(a,b,0/1/2/3)$--前$a$位&#xff0c;两个数相差$b$个1&#xff0c;$b$可以为负数&#xff0c;然后四种情况&#xff1a;$i<j<n$&#xff0c;…