第3关:Set接口

任务描述

本关任务:练习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 删除元素

 
  1. // 引入 HashSet 类
  2. import java.util.HashSet;
  3. public class RunoobTest {
  4. public static void main(String[] args) {
  5. HashSet<String> sites = new HashSet<String>();
  6. sites.add("Google");
  7. sites.add("Runoob");
  8. sites.add("Taobao");
  9. sites.add("Zhihu");
  10. sites.add("Runoob"); // 重复的元素不会被添加
  11. sites.remove("Taobao"); // 删除元素,删除成功返回 true,否则为 false
  12. System.out.println(sites);
  13. }
  14. }

删除集合中所有元素可以使用 clear 方法

2.2 添加元素

 
  1. // 引入 HashSet 类
  2. import java.util.HashSet;
  3. public class RunoobTest {
  4. public static void main(String[] args) {
  5. HashSet<String> sites = new HashSet<String>();
  6. sites.add("Google");
  7. sites.add("Runoob");
  8. sites.add("Taobao");
  9. sites.add("Zhihu");
  10. sites.add("Runoob"); // 重复的元素不会被添加
  11. System.out.println(sites);
  12. }
  13. }

2.3遍历元素

 
  1. // 引入 HashSet 类
  2. import java.util.HashSet;
  3. public class RunoobTest {
  4. public static void main(String[] args) {
  5. HashSet<String> sites = new HashSet<String>();
  6. sites.add("Google");
  7. sites.add("Runoob");
  8. sites.add("Taobao");
  9. sites.add("Zhihu");
  10. sites.add("Runoob"); // 重复的元素不会被添加
  11. for (String i : sites) {
  12. System.out.println(i);
  13. }
  14. }
  15. }

2.4 判断元素是否存在

 
  1. // 引入 HashSet 类
  2. import java.util.HashSet;
  3. public class RunoobTest {
  4. public static void main(String[] args) {
  5. HashSet<String> sites = new HashSet<String>();
  6. sites.add("Google");
  7. sites.add("Runoob");
  8. sites.add("Taobao");
  9. sites.add("Zhihu");
  10. sites.add("Runoob"); // 重复的元素不会被添加
  11. System.out.println(sites.contains("Taobao"));
  12. }
  13. }

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));
		}

}

头哥的第3讲的是如何使用Hadoop分布式文件系统(HDFS)的Java API来上传文件。HDFS是Hadoop生态系统的核心组成部分,用于存储大量数据。在这个任务中,你需要做的是: 1. **设置环境**:首先,确保已安装Hadoop和HDFS,并配置好相Java环境变量,如`hadoop home`路径。 2. **导入依赖**:在Java项目中,通常需要添加`hadoop-client`或`hadoop-hdfs-client`库到项目的构建工具(如Maven或Gradle)的依赖中。 3. **创建FSDataOutputStream**:通过`FileSystem`接口,创建一个指向HDFS目录的`FSDataOutputStream`,这是向HDFS写入数据的流。 4. **打开文件并写入**:使用`FSDataOutputStream.open()`方法打开要上传的文件,然后可以使用`write()`或`writeBytes()`方法将本地文件的内容写入这个流。 5. **闭流和释放资源**:写入完成后,记得调用`close()`方法闭流,确保所有数据都被保存并释放系统的资源。 示例代码片段可能类似这样: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://your-namenode-ip:port"); // 根据实际情况替换 try (FileSystem fs = FileSystem.get(conf); FSDataOutputStream out = fs.create(new Path("/your/directory/yourfile.txt"))) { Files.copy(Paths.get("localfile.txt"), out); // 从本地文件系统复制内容到HDFS } catch (IOException e) { e.printStackTrace(); } // 闭流 out.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值