栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java】HashSet 和 TreeSet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java】HashSet 和 TreeSet

一. HashSet

1. HashSet 数据结构哈希表。HashSet 中的元素是不能重复的,需要覆盖 hashcode 和 equals 方法来保证元素不会重复。

Java Platform SE 7 https://docs.oracle.com/javase/7/docs/api/2.  HashSet 使用示例

// (1) 定义 HashSet
HashSet hs = new HashSet();

// (2) 添加元素	
hs.add("three");
hs.add("one");
hs.add("two");
hs.add("one");

// (3) for 遍历	
for(String e:hs){
	System.out.println(e);
}

// (4) 迭代器编译
Iterator it = hs.iterator();
while(it.hasNext()){
	System.out.println(it.next());
}
		
// (5) 自定义的类需要重载实现 hashcode() 和 equals() 方法来保证 HashSet 中元素不重复
class Person implements Comparable{
	
    // 重载 equals() 方法,定义判断两个Person对象相等的规则 
	@Override
	public boolean equals(Object obj) {
		Person p1 = (Person)obj;
		return p1.pid == this.pid;
	}
	
    // 重载 hashCode() 方法,定义实现
	@Override
	public int hashCode() {
		return this.pid+this.name.hashCode();
	}

    private int pid;
	private String name;
	public Person(int pid, String name) {
		super();
		this.pid = pid;
		this.name = name;
	}
}

HashSet hs = new HashSet();
Person p1 = new Person(1,"tom");
Person p2 = new Person(2,"kite");
Person p3 = new Person(3,"rose");
Person p4 = new Person(1,"tom");
		
hs.add(p1);
hs.add(p2);
hs.add(p3);
hs.add(p4); // 根据 equals() 方法,pid相同的元素相等,所以 HashSet 中 p4 会覆盖 p1

for(Person e:hs){
	System.out.println(e);
}

二. TreeSet 

1. TreeSet 的数据结构是树。TreeSet 有自动排序的功能,自定义的对象除了需要重载 hashCode 和 equals 方法外,还需要重载 compareTo 方法自定义排序功能。

// 定义一个 TreeSet
TreeSet ts = new TreeSet();
		
// 自定义的对象
Person p1 = new Person(1,"tom");
Person p2 = new Person(2,"kite");
Person p3 = new Person(3,"rose");
Person p4 = new Person(1,"tom");

// 添加元素		
ts.add(p3);
ts.add(p1);
ts.add(p2);
ts.add(p4);

// 遍历
for(Person e:ts){
	System.out.println(e);
}

class Person implements Comparable{
	@Override
	public int hashCode() {
		return this.pid+this.name.hashCode();
	}

	@Override
	public boolean equals(Object obj) {
        Person p1 = (Person)obj;
		return p1.pid == this.pid;
	}

	@Override
	public String toString() {
		return pid+":"+name;
	}
	
	private int pid;
	private String name;
	public Person(int pid, String name) {
		super();
		this.pid = pid;
		this.name = name;
	}

    // 此 compareTo 实现 pid 降序排序
	@Override
	public int compareTo(Person o) {
		if(this.pid>o.pid){
			return -1;
		}else if(this.pid==o.pid){
			return 0;
		}else{
			return 1;
		}
	}
	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631790.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号