🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## **1 什么是Java HashSet** Java HashSet类用于创建使用哈希表进行存储的集合。它继承了AbstractSet类并实现Set接口。 Java HashSet类的核心要点是: * HashSet通过使用一种称为**哈希**的机制来存储元素。 * HashSet不能存放重复元素。 * HashSet允许为空值。 * HashSet类是非同步的(线程不安全)。 * HashSet元素是无序的。因为元素是根据其哈希码插入的。 * HashSet方便检索数据。 * HashSet的初始默认容量为16,而负载因子为0.75。 <br> <br> ## **2 List和Set的区别** List可以包含重复元素,而Set仅包含唯一元素。 <br> <br> ## **3 Java HashSet的层次结构** :-: ![](https://img.kancloud.cn/72/6b/726bd93687af7bff5e67de3cabac6dfb_161x363.png) HashSet类继承了实现Set接口的AbstractSet类。Set接口继承Collection和Iterable接口。 <br> <br> ## **4 Java HashSet的语法** ~~~ public class HashSet extends AbstractSet implements Set, Cloneable, Serializable ~~~ <br> <br> ## **5 Java HashSet的构造方法** <br> <br> | 构造方法 | 描述 | | --- | --- | | HashSet() | 用于构造默认的HashSet。 | | HashSet(int capacity) | 用于将HashSet的容量初始化为给定的整数容量。随着将元素添加到HashSet中,容量会自动增长。 | | HashSet(int capacity, float loadFactor) | 用于将HashSet的容量初始化为给定的整数容量和指定的负载因子。 | | HashSet(Collection c) | 用于通过使用集合来初始化HashSet。 | ## **6 Java HashSet的方法** <br> <br> | 修饰符 | 方法 | 描述 | | --- | --- | --- | | boolean | [add(E e)]() | 如果指定的元素尚不存在,则用于将其添加到此集合中。 | | void | [clear()]() | 用于删除集合中的所有元素。 | | object | [clone()]() | 用于返回此HashSet实例的浅表副本:元素本身未克隆。 | | boolean | [contains(Object o)]() | 如果此集合包含指定的元素,则用于返回true。 | | boolean | [isEmpty()]() | 如果此集合不包含任何元素,则用于返回true。 | | Iterator | [iterator()]() | 用于返回此集合中元素的迭代器。 | | boolean | [remove(Object o)]() | 如果存在指定元素,则用于从该集合中删除该元素。 | | int | [size()]() | 用于返回集合中的元素数。 | | Spliterator | [spliterator()]() | Java1.8引入的一种并行遍历的机制 | <br> <br> ## **7 Java HashSet的例子** HashSet 类位于 java.util 包中,使用前需要引入它,语法格式如下: ~~~ import java.util.HashSet; // 引入 HashSet 类 ~~~ 以下实例我们创建一个 HashSet 对象 set,用于保存字符串元素: ~~~ HashSet<String> set = new HashSet<String>(); ~~~ 让我们看一个简单的HashSet示例。注意,元素在无序集合中进行迭代。 ``` import java.util.HashSet; public class day01hashset01{ public static void main(String []args){ HashSet<String> set = new HashSet(); set.add("张小虎"); set.add("王小龙"); set.add("李小白"); set.add("赵小黑"); set.add("刘小红"); set.add("刘小红"); // 重复的元素不会被添加 System.out.println(set); } } ``` **运行结果:** 在上面的实例中,刘小红 被添加了两次,它在集合中也只会出现一次,因为集合中的每个元素都必须是唯一的。 <br> <br> ## 8 **Java HashSet排除重复元素** ``` import java.util.HashSet; import java.util.Iterator; // 导入Iterator类 public class day02hashset02{ public static void main(String []args){ HashSet<String> set = new HashSet<String>(); set.add("I`m zhangsan"); set.add("I`m yangba"); set.add("I`m maqi"); set.add("I`m zhangliu"); set.add("I`m wangwu"); set.add("I`m lisi"); Iterator<String> it=set.iterator(); // Iterator迭代器 while(itr.hasNext()){ // 使用hasNext()检查序列中是否还有元素。 System.out.println(it.next()); // 使用next()获得序列中的下一个元素。 } } } ``` **代码解析:** 1. **HashSet<String> set = new HashSet<String>();** 我们创建一个 HashSet 对象 set,用于保存字符串元素: 2. **Iterator<String> itr=set.iterator();** 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。 3. **while(itr.hasNext())** // 使用hasNext()检查序列中是否还有元素。如果有则返回true 4. **it.next()** next()获得序列中的下一个元素。 <br> Iterator这个类,后面接着说 <br> <br> ## **9 Java HashSet删除元素** ``` import java.util.HashSet; import java.util.Iterator; public class day03hashsetromve{ public static void main(String[] args){ HashSet<String> set = new HashSet<String>(); set.add("baidu"); set.add("alibaba"); set.add("tengx"); set.add("Google"); set.add("IBM"); System.out.println("init data :" + set); // 删除元素 set.remove("tengx"); // // 删除元素,删除成功返回 true,否则为 false System.out.println("use remove after :" + set); HashSet<String> set_one = new HashSet<String>(); set_one.add("new1"); set_one.add("new2"); set.addAll(set_one); System.out.println("to update after data :" + set); // 删除指定元素 set.removeIf(str->str.contains("new2")); System.out.println("invoking removeIf after :" + set); // 清空所有元素 set.clear(); System.out.println("invoking clear after :" + set); } } ``` **运行结果:** ``` init data :[alibaba, Google, IBM, baidu, tengx] use remove after :[alibaba, Google, IBM, baidu] to update after data :[alibaba, Google, new2, new1, IBM, baidu] invoking removeIf after :[alibaba, Google, new1, IBM, baidu] invoking clear after :[ ] ``` <br> <br> ## **10 用Collection构造HashSet** ``` import java.util.HashSet; import java.util.ArrayList; import java.util.Iterator; public class day04ArrayList_structure_Hash{ public static void main(String[]args){ ArrayList<String> list = new ArrayList<String>(); list.add("tom"); list.add("jack"); list.add("rose"); HashSet<String> set = new HashSet(list); set.add("dear"); Iterator<String> it = set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } } ``` **运行结果:** tom rose dear jack <br> <br> ## **11:判断元素是否存在** 我们可以使用 contains() 方法来判断元素是否存在于集合当中: ``` import java.util.HashSet; public class day05HashSet05{ public static void main(String[]args){ HashSet<String> set = new HashSet<String>(); set.add("w"); set.add("f"); set.add("h"); System.out.println(set.contains("beijing"));// 返回false if(set.contains("beijing")){ System.out.println("存在"); }else{ System.out.println("不存在"); } } } ```