java中HashSet的特点及实例用法

1、HashSet和TreeSet区别

HashSet底层使用Hash表。

确保元素唯一性的原理:判断元素的hashCode值是否相同。如果是一样的话,会继续判断元素的equals方法是否是true。

TreeSet底层采用红黑树。

确保元素的唯一性是通过Comparable或Comparator接口实现的。

2、HashSet和HashMap区别

事实上,HashSet的底层实现还是HashMap,只是它只使用了Key,具体如下:

(1)在HashSet的add方法的底层,使用HashMap的put方法将key=e,value=PRESENT构建成key-value键值对,当e存在于HashMap的key中时,value将覆盖原来的value,但key保持不变,因此,如果在HashSet中添加了一个已经存在的e元素,新添加的元素就不会存在于HashMap中,因此这就满足了HashSet中元素不会重复的特性。

(2)HashSet的contains方法使用HashMap得到containsKey方法。

知识点扩展:

HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。

基本类型 引用类型
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

HashSet 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.HashSet; // 引入 HashSet 类

以下实例我们创建一个 HashSet 对象 sites,用于保存字符串元素:

HashSet<String> sites = new HashSet<String>();

到此这篇关于java中HashSet的特点及实例用法的文章就介绍到这了,更多相关java中HashSet的使用特点内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JAVA HashSet和TreeSet 保证存入元素不会重复的操作

    Set是一种数据集合.它与List同样继承与Collection接口. 它与Collection接口中的方法基本一致,并没有对Collection接口进行功能进行功能上的扩充,只是比Collection接口更严格了.与List不同的是,Set中的元素是无无需的,并且都以某种规则保证存入的元素不会出现重复. 它的特点也就是: 1. 元素不会出现重复. 2. 元素是无序的.(存取无序) 3. 元素可以为空. 每种类型的Set所使用的避免元素重复的规则都是不同的,今天我们主要还是看HashSet和Tr

  • Java HashSet集合存储遍历学生对象代码实例

    由于Set集合是不存储重复元素的,所以在做此案例时,如果我正常添加一个重复元素是什么结果呢? public class HashSetDemo { public static void main(String[] args) { //创建HashSet集合对象 HashSet<Student> hashSet = new HashSet<Student>(); //创建学生对象 Student s1 = new Student("爱学习", 21); Stude

  • Java面试题之HashSet的实现原理

    HashSet 的实现原理? 首先,我们需要知道它是Set的一个实现,所以保证了当中没有重复的元素. 一方面Set中最重要的一个操作就是查找.而且通常我们会选择 HashSet来实现,因为它专门对快速查找进行了优化. HashSet使用的是散列函数,那么它当中的元素也就无序可寻.当中是允许元素为null的. 先对实现原理进行一个总结: (1)基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap.封装了一个 HashMap 对象来存储所有的集合元素,

  • Java HashSet(散列集),HashMap(散列映射)的简单介绍

    简介 本篇将简单讲解Java集合框架中的HashSet与HashMap. 散列集(HashSet) 快速入门 底层原理:动态数组加单向链表或红黑树.JDK 1.8之后,当链表长度超过阈值8时,链表将转换为红黑树. 查阅HashSet的源码,可以看到HashSet的底层是HashMap,HashSet相当于只用了HashMap键Key的部分,当需要进行添加元素操作时,其值Value始终为常量PRESENT = new Object().以下为HashSet的代码片段: private transi

  • 简单的理解java集合中的HashSet和HashTree几个重写方法

    Java中的set是无序的,但是是不可重复的 HashSet底层是哈希表,通过调用hashcode和equals方法实现去重 当我们HashSet里面存的是字符串时,就能默认去重了,因为String已经重写了hashcode和euqals方法 public static void main(String[] args) { HashSet<String> set = new HashSet(); set.add("java"); set.add("c")

  • java中HashSet的特点及实例用法

    1.HashSet和TreeSet区别 HashSet底层使用Hash表. 确保元素唯一性的原理:判断元素的hashCode值是否相同.如果是一样的话,会继续判断元素的equals方法是否是true. TreeSet底层采用红黑树. 确保元素的唯一性是通过Comparable或Comparator接口实现的. 2.HashSet和HashMap区别 事实上,HashSet的底层实现还是HashMap,只是它只使用了Key,具体如下: (1)在HashSet的add方法的底层,使用HashMap的

  • java中不定长参数的实例用法

    java中不定长参数的使用方法 不定长参数方法的语法如下: 返回值 方法名(参数类型...参数名称) 在参数列表中使用"..."形式定义不定长参数,其实这个不定长参数a就是一个数组,编译器会将(int...a)这种形式看作是(int[] a)的形式. 示例:编写一个不定长参数方法. /** * 定义不定长参数方法 * * @author pan_junbiao * */ public class MyTest { public static int add(int... a) { in

  • Java中的匿名对象定义与用法实例分析

    本文实例讲述了Java中的匿名对象定义与用法.分享给大家供大家参考,具体如下: 一 点睛 匿名对象是指没有名字的对象.实际上,对于对象实例化操作来讲,对象真正有用的部分是在堆内存中,而栈内存中只是保存了一个对象的引用名称(严格来讲是对象在堆内存的地址),所谓匿名对象是指,只开辟了堆内存空间,而没有栈内存指向的对象. 二 实战 1 代码 public class NoNameObject { public void say() { System.out.println("匿名对象是只开辟了堆内存空

  • 详解Java中HashSet和TreeSet的区别

    详解Java中HashSet和TreeSet的区别 1. HashSet HashSet有以下特点: 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是null,但只能放入一个null 当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置. 简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个

  • java中使用map排序的实例讲解

    对列表进行排序也是我们经常遇到的问题,这里缩小一下范围,使用map来对列表排序.相信大家都有过TreeMap排序的经历,不过Map.Entry能按值进行排序,在用法上略胜一筹.下面我们会对这两种map排序的方法分别进行介绍,着重讲解Map.Entry排序的方法. 1.Map.Entry方法 把Map.Entry放进list,再用Comparator对list进行排序 List list = new ArrayList(map.entrySet()); Collections.sort(list,

  • java中关于return返回值的用法详解

    我们输入一个条件时,系统就会对这个条件进行判断,然后给出一个返回时的结论,我们把这个结果看做是返回值.在java里可以使用return语句来进行返回,从字面意思就能很好的理解它的用法了.下面我们就return的有无返回值进行分类展示,同时带来代码的实例分享. 1.定义 return语句可以使其从当前方法中退出,返回到调用该方法的语句处,继续程序的执行. 2.返回语句两种格式 有返回值: (1)return 返回值: (2)return 0 代表程序正常退出, (3)return 1 代表程序异常

  • Java中HashSet和HashMap的区别_动力节点Java学院整理

    什么是HashSet? HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象.如果我们没有重写这两个方法,将会使用这个方法的默认实现.. public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true. 什

  • Java中双向链表详解及实例

    Java中双向链表详解及实例 写在前面: 双向链表是一种对称结构,它克服了单链表上指针单向性的缺点,其中每一个节点即可向前引用,也可向后引用,这样可以更方便的插入.删除数据元素. 由于双向链表需要同时维护两个方向的指针,因此添加节点.删除节点时指针维护成本更大:但双向链表具有两个方向的指针,因此可以向两个方向搜索节点,因此双向链表在搜索节点.删除指定索引处节点时具有较好的性能. Java语言实现双向链表: package com.ietree.basic.datastructure.dublin

  • java 中HttpClient传输xml字符串实例详解

    java 中HttpClient传输xml字符串实例详解 介绍:我现在有一个对象page,需要将page对象转换为xml格式并以binary方式传输到服务端 其中涉及到的技术点有: 1.对象转xml流 2.输出流转输入流 3.httpClient发送二进制流数据 POM文件依赖配置 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifact

  • java 中模式匹配算法-KMP算法实例详解

    java 中模式匹配算法-KMP算法实例详解 朴素模式匹配算法的最大问题就是太低效了.于是三位前辈发表了一种KMP算法,其中三个字母分别是这三个人名的首字母大写. 简单的说,KMP算法的对于主串的当前位置不回溯.也就是说,如果主串某次比较时,当前下标为i,i之前的字符和子串对应的字符匹配,那么不要再像朴素算法那样将主串的下标回溯,比如主串为"abcababcabcabcabcabc",子串为"abcabx".第一次匹配的时候,主串1,2,3,4,5字符都和子串相应的

随机推荐