- 浏览: 5043640 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
public class MapTest { public static void main(String[] args) { Map m =new HashMap(); m.put("1", 2); Object i = m.get("1"); System.out.println(m.put("1", 3)); System.out.println(m.get("1")); Set set = new HashSet(); System.out.println(set.add("5")); System.out.println(set.add("5")); List li = new ArrayList(); set.add("6"); System.out.println(set.add("6")); System.out.println("----set size --- "+set.size());
结果:
2
3
true
false
false
----set size --- 2
先看hashset的构造方法
private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object(); /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ public HashSet() { map = new HashMap<E,Object>(); } /** * Constructs a new set containing the elements in the specified * collection. The <tt>HashMap</tt> is created with default load factor * (0.75) and an initial capacity sufficient to contain the elements in * the specified collection. * * @param c the collection whose elements are to be placed into this set * @throws NullPointerException if the specified collection is null */ public HashSet(Collection<? extends E> c) { map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * the specified initial capacity and the specified load factor. * * @param initialCapacity the initial capacity of the hash map * @param loadFactor the load factor of the hash map * @throws IllegalArgumentException if the initial capacity is less * than zero, or if the load factor is nonpositive */ public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<E,Object>(initialCapacity, loadFactor); } /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * the specified initial capacity and default load factor (0.75). * * @param initialCapacity the initial capacity of the hash table * @throws IllegalArgumentException if the initial capacity is less * than zero */ public HashSet(int initialCapacity) { map = new HashMap<E,Object>(initialCapacity); } /** * Constructs a new, empty linked hash set. (This package private * constructor is only used by LinkedHashSet.) The backing * HashMap instance is a LinkedHashMap with the specified initial * capacity and the specified load factor. * * @param initialCapacity the initial capacity of the hash map * @param loadFactor the load factor of the hash map * @param dummy ignored (distinguishes this * constructor from other int, float constructor.) * @throws IllegalArgumentException if the initial capacity is less * than zero, or if the load factor is nonpositive */ HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor); }
可以看出hashset其实就是hashMap
在看看add方法
public boolean add(E e) { return map.put(e, PRESENT)==null; }
调用的是hashmap的add方法在看看hshmap的put方法
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode());//根据hash算法算出该key在table数组中的位置 int i = indexFor(hash, table.length);//推算出hash值在table的大概位置 for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; //根据key的hashcode 判断出 在table数组中i位置中的Entry链表的key是否是一样的 if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value;//如果是一样的。就替换前面相同key的value,System.out.println(m.get("1"));所以为3 e.recordAccess(this); return oldValue;//返回前面key的value值。所以System.out.println(m.put("1", 3));为2 /* 因为set里面的value是PRESENT 当set相同的key时,返回前面key的value,也就PRESENT , System.out.println(set.add("6")); PRESENT == null 为false public boolean add(E e) { private static final Object PRESENT = new Object(); return map.put(e, PRESENT)==null;//PRESENT是个常量 } */ } }
modCount++; addEntry(hash, key, value, i); return null;//当第一次的返回的为空,所以当set方法第一次添加一个key时。返回的为map.put(e, PRESENT)==null为true }
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20361、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6280严重: Servlet.service() for ser ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1451平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 867在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2149可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1608阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1148质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2851本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1097百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1349使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1602package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 645DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4762java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 557HTTP 是一种"无状 ... -
浅析Cookie中的Path与domain
2017-11-10 09:26 1064Path – 路径。指定与co ... -
入分析volatile的实现原理
2017-11-08 09:47 691通过前面一章我们了解了synchronized是一个重量级的 ... -
Spring MVC-ContextLoaderListener和DispatcherServlet
2017-11-15 09:35 690Tomcat或Jetty作为Servlet ... -
搭建spring框架的时候,web.xml中的spring相关配置,可以不用配置ContextLoaderListener(即只配DispatcherServl
2017-11-07 18:27 1439搭建spring框架的时候,web.xml中的sprin ...
相关推荐
需要注意的是,在使用HashSet和HashMap时,需要重写equals()和hashCode()方法,以确保对象的唯一性。如果没有重写这两个方法,将会使用这个方法的默认实现,从而可能导致错误的结果。 HashSet和HashMap是两个不同的...
自己写的例子,关于HashSet遍历和HashMap遍历的. 感谢大家参考
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...
HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...
编写一个查询类,输入学生学号,若该生在数据文件(test.txt)中存在,在JTextArea中显示该生信息 若该生在数据文件(test.txt)中不存在,显示”查无此人”,可反复查找.在输出中,能显示该生的总成绩和平均成绩,将显示结果...
之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也是说HashSet里面有一个HashMap(适配器模式)。因此本文将重点分析HashMap。 HashMap实现了Map...
### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...
这种实现方式让HashSet的操作非常简单高效,因为HashSet的大部分操作,包括添加元素、删除元素、检查元素是否存在等,都是直接调用HashMap的相关方法来完成的。 首先,我们来详细了解一下HashSet的基本概念和结构。...
因此,HashSet判断元素是否重复的方式与HashMap类似:首先计算元素的哈希值,然后通过equals()方法检查是否存在相同的元素。 **TreeMap** TreeMap是一个有序的键值对存储结构,它根据键的自然顺序或者自定义比较器...
HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是...
4. **HashSet的添加操作**:HashSet.add()方法实际上调用了HashMap的put()方法,当添加新元素时,会先计算元素的哈希值,然后在HashMap中查找对应位置,如果该位置为空或者存在元素但equals()返回false,则添加成功...
因此,HashSet的插入和查找速度与HashMap相当,但由于HashSet不需要存储值,所以它的空间效率略高于HashMap。 在使用HashMap时,需要注意的是,如果自定义的键类没有重写equals()和hashCode()方法,可能会导致哈希...
`add()`、`contains()`和`remove()`方法是HashSet的关键,它们的行为与HashMap的相应方法紧密相关。 至于"Hashmap同步问题",在多线程环境下,如果不进行适当的同步控制,HashMap不是线程安全的。这意味着在并发...
HashSet通过调用HashMap的方法来完成添加、删除、查找等操作。HashMap提供了快速定位元素的能力,使得HashSet具有高效的查找性能。 ### 源码解析(基于JDK 1.6.0_45) 在JDK 1.6版本的HashSet源码中,可以看到一个...
在给定的标题和描述中,提到了几种关键的数据结构:HashSet、HashMap、Heap(堆)以及Red-Black Tree(红黑树)。下面将对这些数据结构及其在C++中的实现进行详细解释。 1. **HashSet**: HashSet是基于哈希表实现...
上面的示例程序创建了一个HashSet对象,并通过add方法添加了几个字符串元素。然后使用contains方法检查HashSet中是否包含特定字符串。我们还演示了remove方法来删除一个元素,使用size方法获取了HashSet中元素的数量...
- 使用`add()`方法向HashSet添加元素。 - 使用`put()`方法将键值对添加到HashMap。 了解这些差异后,可以根据实际需求选择适合的数据结构。例如,如果只需要存储不重复的元素,且不关心元素的顺序,可以选择...
HashSet基于HashMap实现,每个元素作为HashMap的一个键,值为null。因此,HashSet的操作性能也依赖于HashMap。 六、HashMap在JVM内存中的表现 HashMap占用的内存包括数组和Entry对象,Entry对象包含键值对和指向下...