java学习日记(8)———set集合的一些注意问题

本文详细解析Java集合框架中的set集合特性及排序方法,包括HashSet底层原理、元素唯一性保证、treeset排序策略及自定义排序实现,提供深入理解和实际应用的指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- android培训java培训、期待与您交流! ----------------------

      关于set集合和一些排序问题,困扰了我一段时间,对于set集合,她和list不同,因为她内部不能放重复的元素,元素是无序的,也就是说存入和取出的顺序不一定一致,比如说HashSet:底层数据结构是哈希表,结构的,把字符串往里面存还还好,不过一旦存自己定义的元素,就会有些问题需要注意了往hashSet集合中存入自定对象,假如往hashSet集合中存入自定对象姓名和年龄相同为同一个人,重复元素。我们要先想HashSet是如何保证元素唯一性的呢?他是通过元素的两个方法,hashCodeequals来完成。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}

public int hashCode()
{
System.out.println(this.name+"....hashCode");
return name.hashCode()+age*37;
}

public boolean equals(Object obj)
{

if(!(obj instanceof Person))
return false;

Person p = (Person)obj;
System.out.println(this.name+"...equals.."+p.name);

return this.name.equals(p.name) && this.age == p.age;
}


public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}

      这里面姓名和年龄一样才算是同一个元素,首先我们应该复写equals方法,因为是同一个人东方人标准是有我们定义的所以要复写父类,因为我们要先判断hashcode,如果hashcode相同,继续判断equals,所以hashcode,equals耳麦都有必要复写下面是关于treeset的排序得一些方法:
|--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.

TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。

TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。

 

---------------------- android培训java培训、期待与您交流! ----------------------

转载于:https://www.cnblogs.com/chor/archive/2012/02/03/2336449.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值