HashSet集合

1.HashSet

  Set集合,无索引,不可以重复,无序

  在使用 list 集合时,add方法返回的永远时true,有序,有索引

  在使用 Set 集合时,add方法再添加重复元素时,返回的false,无序,无索引

 1     HashSet<String> hashSet = new HashSet<>();
 2         hashSet.add("t");
 3         hashSet.add("a");
 4         hashSet.add("b");
 5         hashSet.add("b");
 6         hashSet.add("c");
 7         hashSet.add("r");
 8         hashSet.add("a");
 9         System.out.println(hashSet.size()); //    长度为    5
10
11         System.out.println(hashSet);        //输出结果        [a, b, r, c, t]
12
13
14         for (String s : hashSet) {            //    输出结果        a b r c t
15             System.out.print(s+ " ");
16         }

  1.储存自定义对象保证元素的唯一性

  2.当 hashset 存储自定义对像时(例:student类),必须重写 equals 方法和 hashcode 方法才能保证元素的唯一

  3.把对象往集合中添加时,会调用hashcose方法,hashcose值一样时才会调用equals方法。

  

  

1 public boolean equals(Object obj){
2     //向下转型为Student类
3     Student s = (Student)obj;
4     return this.name.equals(s.name) && this.age == s.age;
5   }
1 // 因为每个对象的hashcode的值都不一样,
2 // 而 equals 方法需要两个对象的 hashcode值都一样才可以进行判断
3 // 所以在hashcode方法中返回一个固定的值,
4     public int hashCode() {
5         return 10;
6
7
8     }

  1.hashset原理

     我们使用set方法都是需要去掉重复的元素,如果在储存的时候逐个equals()方法比较,效率低,哈希算法提高

   了去重复的效率,降低了使用equals()方法的次数

     当 hashset 调用了 add() 方法储存对象的时候,先调用对象的 hashcode()方法得到一个哈希值,

   然后再集合中查找是否有哈希值相同的对像,如果没有安徽细致相同的对象就直接存入集合,

   如果有哈希值相同的对象,就和哈希值相同的对象诸葛进行 equals()比较,比较结果为false就存入,true就不存

     将自定义类(如,student,person,cat)的对象存入hashset去重复,必须重写hashcode()和equals方法

原文地址:https://www.cnblogs.com/xsh726/p/11378839.html

时间: 2024-10-13 21:28:40

HashSet集合的相关文章

java 17 - 9 HashSet集合、TreeSet集合的练习

HashSet集合的练习 1 package zl_TreeSetTest; 2 /* 3 创建学生类 4 成员变量: 5 A:姓名 6 B:语文成绩 数学成绩 英语成绩 7 */ 8 public class Student { 9 private String name ; 10 private int chinese; 11 private int english; 12 private int math; 13 14 public Student() { 15 super(); 16 /

C# HashSet集合类型使用介绍

1.HashSet集合 使用HashSet可以提高集合的运算.使用HashSet集合不自带排序方法,如果需要排序的需求可以参考使用List<T>集合配合Sort方法. HashSet的优势在与运算快,作为一种存放在内存的数据,可以很快的进行设置和取值的操作.HashSet无法向里面添加重复的数据,避免添加HashSet<T>里面的数据重复.我们使用HashSet常常在集合相加集合相减这些集合与集合之间的操作之中. 使用HashSet作为内存存储的快速数据库,这个需要随时跟新Hash

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

HashSet集合是如何保证元素的唯一性的?

HashSet集合的特点是元素无序和不重复 . 首先,HashSet的底层数据结构是哈希表.哈希表就是存储一系列哈希值的表,而哈希值是由对象的hashCode()方法生成的. 确保元素唯一性的两个方法,hashCode()和equals()方法. 当调用add()方法向集合中存入对象的时候,先比较此对象与原有对象的哈希值有没有一样的,如果都不一样就直接存入:如果有与之相同的哈希值,则要继续比较这两个对象是否为同一个对象,此时就要调用对象的equals()方法了. 总之,只有HashCode的至相

Set\HashSet集合为什么能去重(转)

如果想查找一个集合中是否包含有某个对象,大概的程序代码怎样写呢?当发现某个元素与要查找的对对象进行equals方法比较的结果相等时,则停止继续查找并返回肯定的信息,否则返回否定的信息.如果是一个集合中有很多元素,譬如有一万个元素,并且没有包含要查找的对象时,则意味着你的程序需要从该集合中取出一万个元素进行啄一的比较才能得到结论,有人发明了一种hashCode算法,来提高查找的效率,这种方式将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个

Java学习(set接口、HashSet集合)

一.set接口 概念:set接口继承自Collection接口,与List接口不同的是,set接口所储存的元素是不重复的. 二.HashSet集合 概念:是set接口的实现类,由哈希表支持(实际上是一个HashMap集合).HashSet集合元素的提取顺序与存储顺序不相同. 采用哈希表数据结构存储数据,保证元素唯一性的方式依赖于:hashCode()与equals()方法. 2.1哈希表 什么是哈希表? 链表与数组的组合. 哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时

HashSet集合的add()方法的源码

interface Collection { ... } interface Set extends Collection { ... } class HashSet implements Set { private static final Object PRESENT = new Object(); private transient HashMap<E,Object> map; public HashSet() { map = new HashMap<>(); } publi

Set容器--HashSet集合

Set容器特点: ①   Set容器是一个不包含重复元素的Collection,并且最多包含一个null元素,它和List容器相反,Set容器不能保证其元素的顺序; ②   最常用的两个Set接口的实现类是HashSet和TreeSet; 1 HashSet<String> data=new HashSet<String>(); 2 data.add("张三"); 3 data.add("李四"); 4 data.add("jay&

java用HashSet集合判断重复问题。

HashSet set = new HashSet(); if(null!=goodsDtlList){ for(GoodsRecordDtl grd : goodsDtlList){ if(set.contains(grd.getMaterialNo())==true){ System.out.println("materialNo字段有相同的,记录重复!"); return SUCCESS; }else{ set.add(grd.getMaterialNo()); } } } 大家