任务描述
本关任务:练习HashSet的增删改查
1.添加值为helloHashSet的元素
2.更改元素值,将cat改成fish
3.删除值为apple的元素
相关知识
1.Set接口概述
一个不包含重复元素的 collection,无序。
哈希表确定元素是否相同
1、 判断的是两个元素的哈希值是否相同。 如果相同,再判断两个对象的内容是否相同。
2、 判断哈希值相同,其实判断的是对象的HashCode方法。判断内容相同,用的是equals方法。
2 HashSet类概述
- 不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变。
- HashSet如何保证元素唯一性
- 底层数据结构是哈希表(元素是链表的数组)
- 哈希表依赖于哈希值存储
- 添加功能底层依赖两个方法:int hashCode()、boolean equals(Object obj)
HashSet集合之所以能确保不出现重复的元素,是因为它在存入元素时做了很多工作。当调用HashSet集合的add()方法存入元素时,首先调用当前存入对象的hashCode()方法获得对象的哈希值,然后根据对象的哈希值计算出一个存储位置。如果该位置上没有元素,则直接将元素存入,如果该位置上有元素存在,则会调用equals()方法让当前存入的元素依次和该位置上的元素进行比较,如果返回的结果为false就将该元素存入集合,返回的结果为true则说明有重复元素,就将该元素舍弃。整个存储的流程如下图所示。
HashSet存储元素保证唯一性的代码及图解:
2.1 删除元素
// 引入 HashSet 类
import java.util.HashSet;
public class RunoobTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
sites.remove("Taobao"); // 删除元素,删除成功返回 true,否则为 false
System.out.println(sites);
}
}
删除集合中所有元素可以使用 clear 方法
2.2 添加元素
// 引入 HashSet 类
import java.util.HashSet;
public class RunoobTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
System.out.println(sites);
}
}
2.3遍历元素
// 引入 HashSet 类
import java.util.HashSet;
public class RunoobTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
for (String i : sites) {
System.out.println(i);
}
}
}
2.4 判断元素是否存在
// 引入 HashSet 类
import java.util.HashSet;
public class RunoobTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
System.out.println(sites.contains("Taobao"));
}
}
2.5修改元素
HashSet并没有提高修改元素的方法,直接修改元素可能会导致重复项,与HashSet的特点违背,因此要实现修改元素可采用如下方法:判断元素是否存在,存在则删除,之后添加新元素,最终实现修改元素的效果。
编程要求
根据提示,在右侧编辑器补充代码,操作HashSet完成以下任务:
1.添加值为helloHashSet的元素
2.更改元素值,将cat改成fish
3.删除值为apple的元素
测试说明
平台会对你编写的代码进行测试:
无输入
开始你的任务吧,祝你成功!
package step3;
import java.util.HashSet;
import java.util.Scanner;
public class HelloSet {
public static void main(String[] args) {
HashSet<Object> hashSet = new HashSet<>();
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < 5; i++) {
hashSet.add(scanner.next());
}
// ---------------------Begin------------------------
hashSet.add("helloHashSet");
hashSet.remove("apple");
if(hashSet.contains("cat")) {
hashSet.remove("cat");
hashSet.add("fish");
}
// ---------------------End------------------------
hashSet.forEach(ele -> System.out.println(ele));
}
}