首页 > 编程知识 正文

set集合方法,idea提交代码到svn

时间:2023-05-03 16:35:36 阅读:32835 作者:4129

Set集合特点:元素无序,无重复元素。 Set有两个常见的具体集合子类: HashSet和TreeSet

HashSet )基数据结构是哈希表,存储检索顺序不一致。

TreeSet :底层是二叉树。 可以对保存的元素进行排序。

Set集合中需要注意的一个问题是元素不重复。 因此,很重要的一点是弄清楚每个集合的子类是如何保证自己元素不重复的。

HashSet如何避免自己的元素重复? 同样,对于字符串型的HashSet,不进行任何操作就进行保证唯一性的访问,对于自己定义的类,例如Person,HashSet,如果不进行额外的处理,就不能得到唯一性的效果。 我该怎么办? Person类除了从Object继承equals方法外,还继承名为hashCode ()的方法。 同样,缺省hashCode ()方法并没有达到预期的效果,因此必须复盖此方法。 在涵盖该方法之前,我将介绍HashSet保证元素唯一性的原理。 首先,它确定元素的哈希值是否相同,即hashCode () )的返回值,如果不同,则认为这两个元素不同。 如果相同,则调用元素的equals方法进行比较,如果不同,则认为元素不同。 如果相同,则元素被视为相同。 根据这个比较来判断两个元素是否相同。

假设Person包含两个属性字段: name和age。

@Override

公共int hashcode (

return this.name.hashCode () age * 11;

}

通过封面,hashCode ()方法的表达是我们期待的表达。 同时,必须覆盖equals方法。 与Java List集合操作相同。

如果TreeSet保证自己要素的唯一性呢? 同样,对于字符串类型的TreeSet,无需任何操作即可进行唯一性保证的访问,对于自己定义的类,例如Person,TreeSet如果不进行追加处理,则TreeSet集合中有两个以上的Person对象TreeSet集合要求存储的元素实现Comparable接口,因此是实现该接口的compareTo ()方法。

假设Person包含两个属性字段: name和age。

classpeopleimplementscomparable {

@Override

公共int比较to (peopleo ) {

int result=this.getName ().comPareto ).getname ) );

if(result==0) {

return this.getAge ()- o.getAge );

}

返回结果;

}

}

上面的此封面按Person的name属性排序,如果name排序相同,则按age排序。 TreeSet由compareTo返回的值确定,如果返回值为0,则两个元素被视为相同的元素。 其他两个结果分别返回正负,根据需求进行升降排序。 TreeSet仅通过compareTo方法来确保元素的唯一性。

在这种情况下,如果人员不是自己编写的,而是来自第三方类,而且还没有实现Comparable接口,则还存在需要根据需求进行排序的其他问题。 此时,必须使用一体不同的接口:Comparator。 要实现此接口,请创建其他类,并将其传递给TreeSet的构造函数。

class CMP实施比较器{

@Override

公共int比较(People o2,People o2 ) {

int result=o1.getName ().comPareto () O2.getname ) );

if(result==0) {

returnO1.getage(-O2.getage );

}

返回结果;

}

}

treeset treeset=new treeset (newcmp );

用这种方法可以解决上述问题。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。