Java进阶篇8——HashSet

1. 集合类总纲

在这里插入图片描述

2. HashSet 的使用

2.1 HashSet 构造与增加元素

  • 集合中元素的储存空间是自动开辟的。
  • 集合中元素是根据元素值和相应的哈希算法计算其地址,元素值相同,则地址相同。
  • 所以 HashSet中不存在元素值重复的元素。
  • 比如,HashSet 的存储就像夜晚的星星一样排列,无先后顺序。
		HashSet hashset = new HashSet();
		
		hashset.add("a");
		hashset.add("a"); // 无法添加,因为元素不能重复
		hashset.add(new Integer(1));
		int[] a = {1, 2, 3, 4};
		hashset.add(a);
		MyHashSet mh = new MyHashSet();
		hashset.add(mh);

2.2 遍历 HashSet 集合中的元素

  • 集合中元素是依据元素值和相应的哈希算法计算其地址。
  • 遍历集合,需要遍历算法(即使用迭代器)。
  • Iterator
	/**
	 * 遍历 HashSet 集合中的元素
	 */
	public static void practice1() {
		HashSet<Integer> hashset = new HashSet<Integer>();

		hashset.add(100);
		hashset.add(55);
		hashset.add(25);
		hashset.add(10);
		hashset.add(5);

		Iterator<Integer> it = hashset.iterator();
		while (it.hasNext()) {
			System.out.print(it.next() + " ");
		}
	}
100 5 55 25 10 

2.3 删除 HashSet 中的元素

  • 删除一个元素:
hashset.remove(Object);
  • 删除所有元素:
hashset.clear();

2.4 判断是否包含某个元素 contains(Object)

	/**
	 * 判断是否包含某个元素 contains(Object)
	 */
	@SuppressWarnings("removal")
	public static void practice2() {
		HashSet<Object> hashset = new HashSet<Object>();

		hashset.add(new String("I love java"));
		hashset.add(new Integer(100));
		hashset.add(new Double(100.2));
		hashset.add("a");

		if (hashset.contains("I love java"))
			System.out.println("集合中包含I love java");
		else
			System.out.println("集合中不包含I love java");
	}
集合中包含I love java

3. HashSet集合类不能有重复元素的实例

3.1 加入了重复对象

package javaweb.collection;

import java.util.HashSet;
import java.util.Iterator;

public class Student {
	String id, name;
	int age;

	public Student(String id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	
	public String toString() {
		return id + " " + name + " " + age;
	}

	public static void main(String[] args) {
		HashSet<Student> hashset = new HashSet<Student>();

		Student student1 = new Student("1001", "chen", 18);
		Student student2 = new Student("1001", "chen", 18);
		hashset.add(student1);
		hashset.add(student2);

		Iterator<Student> it = hashset.iterator();
		while(it.hasNext()) {
			System.out.println(it.next() + " ");
		}
	}

}
1001 chen 18 
1001 chen 18 

3.2 要重写 equals() 和 hashCode() 方法

  • 这下就只增加得了一个对象
package javaweb.collection;

import java.util.HashSet;
import java.util.Iterator;

public class Student {
	String id, name;
	int age;

	public Student(String id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return id + " " + name + " " + age;
	}

	@Override
	public boolean equals(Object obj) {
		return id.equals(((Student) obj).id);
	}

	@Override
	public int hashCode() {
		return Integer.valueOf(id);
	}

	public static void main(String[] args) {
		HashSet<Student> hashset = new HashSet<Student>();

		Student student1 = new Student("1001", "chen", 18);
		Student student2 = new Student("1001", "chen", 18);
		hashset.add(student1);
		hashset.add(student2);

		Iterator<Student> it = hashset.iterator();
		while (it.hasNext()) {
			System.out.println(it.next() + " ");
		}
	}

}
1001 chen 18 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NoBug.己千之

鼓励,鼓励,更加努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值