HashSet常用方法

  1. HashSet.add() — 添加元素

public boolean add(E e)
如果指定的元素尚不存在,则将其添加到此集合中。更正式地,将指定的元素e这套如果此集合不包含任何元素e2,使得 Objects.equals(e, e2)。如果此set已包含该元素,则调用将保持set不变并返回false。

  1. HashSet.remove() — 删除元素

public boolean remove(Object o)
如果存在,则从该集合中移除指定的元素。更正式地说,移除元素e,使得 Objects.equals(o, e),如果此set包含这样的元素。返回true此set是否包含该元素(或等效地,如果此set因调用而更改)。(一旦调用返回,该集合将不包含该元素。

  1. HashSet.clear() —删除所有元素

public void clear()
删除此集合中的所有元素。此调用返回后,该集将为空。

  1. HashSet.contains() — 是否包含指定元素

public boolean contains(Object o)
true如果此set包含指定的元素,则返回。更正式地说,返回true当且仅当此set包含的元素e,使得 Objects.equals(o, e)。

  1. HashSet.isEmpty() — 是否为空

public boolean isEmpty()
true如果此set不包含任何元素,则返回

  1. HashSet.size() — 集合中元素个数

public boolean isEmpty()
true如果此set不包含任何元素,则返回


测试示例

package day_3_30;

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

public class HashSetTest {

	public static void main(String[] args) {
//		testHashSet();		//测试hashSet存储基本类型的数据
		testHashSet2();		//测试hashSet存储对象
	}

	private static void testHashSet() {
		// 新建HashSet
		HashSet hashSet = new HashSet();

		// 将元素添加到Set中
		hashSet.add("a");
		hashSet.add("b");
		hashSet.add("c");
		hashSet.add("d");
		hashSet.add("e");
		hashSet.add(12);
		hashSet.add("12");
		hashSet.add("c");
//		hashSetTraverse(hashSet);
		
		// 判断HashSet是否包含某个值
        System.out.printf("HashSet contains a :%s\n", hashSet.contains("a"));
        System.out.printf("HashSet contains g :%s\n", hashSet.contains("g"));
		
		//删除某一个元素
		hashSet.remove("c");
		hashSetTraverse(hashSet);
		
		
		// 新建一个包含b、c、f的HashSet
        HashSet anotherHashSet = new HashSet();
        anotherHashSet.add("b");
        anotherHashSet.add("c");
        anotherHashSet.add("f");
        
        // 克隆一个hashSetClone,内容和hashSet一模一样
        HashSet hashSetClone = (HashSet)hashSet.clone();
        
        // 删除“hashSetClone中,属于anotherHashSet的元素”
        hashSetClone.removeAll(anotherHashSet);
        
        // 打印hashSetClone
        System.out.printf("removeset : %s\n", hashSetClone);

//==============================================================================================       
        // 克隆一个retainset,内容和hashSet一模一样
        HashSet retainset = (HashSet)hashSet.clone();
        
        // 保留“retainset中,属于otherSet的元素”
        retainset.retainAll(anotherHashSet);
        
        // 打印retainset
        System.out.printf("retainset : %s\n", retainset);
	}
	



	private static void testHashSet2() {
		HashSet hashSet = new HashSet();
		hashSet.add(new User(1,"张三"));
		hashSet.add(new User(1,"张三"));
		hashSet.add(new User(2,"李四"));
		hashSet.add(new User(3,"王五"));
		hashSetTraverse(hashSet);
		
		//思考:为什么看似同样的对象,为什么不去重?
		//这里我们需要先来了解一个概念
		/*HashMap集合判断两个元素相等的标准:两个对象的equals方法相等,并且hashCode方法返回值也相等..*/
		
		//我们来看一下hashSet中的hashCode
		System.out.println("\nhashSet中的hashCode值:");
		for(Object obj:hashSet) {
			System.out.print(obj.hashCode() + "\t");
		}
		
		//是不是明白了,对象为什么没有去重.那有应该如何实现对象的去重.释放User类中的equals和hashCode的重写吧。
		System.out.println("\n\n是不是明白了,对象为什么没有去重.\n那又应该如何实现对象的去重?\n释放User类中的equals和hashCode的重写吧(你可以尝试分别释放它们)。");
	}	
	
	
	
	
	
	//hashSet的两种遍历方式。
	public static void hashSetTraverse(HashSet hashSet) {
		// HashSet是无序的,是指存储顺序与遍历顺序不一致。
		// 遍历
		// 迭代器
		System.out.println("用Iterator进行遍历:");
		Iterator iterator = hashSet.iterator();
		while (iterator.hasNext()) {
			Object obj = iterator.next();
			System.out.println(obj);
		}

		// 加强for循环进行遍历
		System.out.println("\n\n用加强for循环进行遍历:");
		for (Object obj : hashSet) {
			System.out.println(obj);
		}
	}
}

package day_3_30;

public class User {
	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}

	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public User() {
		super();
	}

//	@Override
//	public int hashCode() {
//		final int prime = 31;
//		int result = 1;
//		result = prime * result + id;
//		result = prime * result + ((name == null) ? 0 : name.hashCode());
//		return result;
//	}
//
//	@Override
//	public boolean equals(Object obj) {
//		if (this == obj)
//			return true;
//		if (obj == null)
//			return false;
//		if (getClass() != obj.getClass())
//			return false;
//		User other = (User) obj;
//		if (id != other.id)
//			return false;
//		if (name == null) {
//			if (other.name != null)
//				return false;
//		} else if (!name.equals(other.name))
//			return false;
//		return true;
//	}

	
}



返回Set目录

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值