Set3

package com.cavaness.quartzbook.chapter3;

import java.util.Collection;
import java.util.HashSet;

public class Point {
	private int x;
	private int y;

	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}
	
	

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + x;
		result = prime * result + y;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Point other = (Point) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Point [x=" + x + ", y=" + y + "]";
	}

	public static void main(String[] args) {
		Point point = new Point(1, 2);
		Point point3 = new Point(3, 4);
		
		Collection<Point> points = new HashSet<Point>();
		points.add(point);
		points.add(point3);
		
		point.setX(2); // 当一个对象存储进HashSet之后,就不能修改这个对象参与hashcode计算的字段了,
		points.remove(point); // 因为这样会计算新的hashcode,从而找不到原先的hashcode,找不到对应的区域,从而找不到原先的元素
		
		System.out.println(points.size()); // 2 不是1
		
		for (Point point4 : points) {
			System.out.println(point4);
		}
	}
}

在 JavaScript 中,`Set` 是一种集合数据结构,它可以存储任意类型的值(包括对象、数组、字符串等)。因此,你可以将键值对(如 `set1:"A", set2:"b", set3:"c"`)表示为对象,并将该对象作为 `Set` 的一个值。 然而,`Set` 本身并不直接支持键值对的形式(像 `Map` 那样),但可以通过以下方式实现类似的功能: --- ### 解决方案 #### 方法 1:将对象添加到 `Set` 中 你可以将一个包含键值对的对象作为 `Set` 的一个值。 ```javascript // 创建一个 Set const mySet = new Set(); // 定义一个对象,包含键值对 const keyValueObject = { set1: "A", set2: "b", set3: "c" }; // 将对象添加到 Set 中 mySet.add(keyValueObject); // 输出 Set 中的值 for (let value of mySet) { console.log(value); } ``` #### 方法 2:使用 `Map` 实现键值对功能 如果你需要更灵活地操作键值对,可以考虑使用 `Map` 而不是 `Set`。 ```javascript // 创建一个 Map const myMap = new Map(); // 添加键值对到 Map 中 myMap.set("set1", "A"); myMap.set("set2", "b"); myMap.set("set3", "c"); // 遍历并输出 Map 中的键值对 for (let [key, value] of myMap) { console.log(`${key}: ${value}`); } ``` --- ### 解释 1. **方法 1:将对象添加到 `Set`**: - 在这个方法中,我们将一个包含键值对的对象(`keyValueObject`)作为一个整体添加到 `Set` 中。 - 注意:`Set` 只能存储唯一的值。如果再次添加相同的对象引用,则不会重复存储。对于不同的对象实例,即使它们的内容相同,也会被视为不同的值。 2. **方法 2:使用 `Map`**: - `Map` 是专门用于存储键值对的数据结构。 - 使用 `Map` 可以更方便地操作键值对,例如通过键获取值、删除键值对等。 --- ### 示例输出 运行上述代码后,控制台输出如下: #### 方法 1 输出: ``` { set1: &#39;A&#39;, set2: &#39;b&#39;, set3: &#39;c&#39; } ``` #### 方法 2 输出: ``` set1: A set2: b set3: c ``` --- ### 注意事项 - 如果你需要频繁地通过键查找值,建议使用 `Map` 而不是 `Set`。 - 如果你只需要存储唯一的数据结构(如对象或数组),则可以使用 `Set`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值