(转) Java集合之Set

本文介绍两种使用Java对Person对象集合进行排序的方法:一种是通过实现Comparable接口中的compareTo方法,另一种是自定义比较器并在创建TreeSet时传入。示例代码展示了如何按年龄对Person对象进行排序。

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

关于集合可以谈的地方不多,关键是熟练。所以我在Set中给出了两种常见的排序方法,

一种是实现Comparable接口中的compareTo方法,现在给出实现程序

package blog;

 

public class Person implements Comparable{

       private String name;

       private int age;

       public Person(String name, int age) {

              this.name = name;

              this.age = age;

       }

 

       public int getAge() {

              return age;

       }

 

       public String getName() {

              return name;

       }

 

       public int hashCode() {

              return name.hashCode()*10+age;

       }

 

 

       public boolean equals(Object obj) {

       if(this==obj)return true;

       else{

              if(this.getClass()==obj.getClass())

              {

                     Person temp=(Person)obj;

                     if(this.name.equals(temp.getName())&&this.age==temp.getAge())

                            return true;

                     else return false;

 

              }

              else return false;

             

       }

       }

      

       public String toString()

       {

              return "姓名:"+name+"年龄:"+age;

       }

 

       public int compareTo(Object o) {

              Person temp=(Person)o;

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

       }

}

 

package blog;

 

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

 

public class Test {

 

       public static void main(String[] args) {

     TreeSet<Person> myset=new TreeSet<Person>();

     Person person1=new Person("person1",12);

     Person person2=new Person("person2",32);

     Person person3=new Person("person1",12);

     Person person4=new Person("person4",11);

     Person person5=new Person("person5",22);

    

     myset.add(person1);

     myset.add(person2);

     myset.add(person3);

     myset.add(person4);

     myset.add(person5);

     showme(myset);

    

             

       }

       public static void showme(Set set)

       {   Iterator it=set.iterator();

              while(it.hasNext())

              {

                     Person temp=(Person)it.next();

                     System.out.println(temp);

              }

             

       }

 

}

另一种方式是写一个比较器,在构造Set的时候持有该比较器的引用

package blog;

import java.util.*;

 

public class MyComparator implements Comparator {

 

       public int compare(Object o1, Object o2) {

       Person person1=(Person)o1;

       Person person2=(Person)o2;

       return person1.getAge()-person2.getAge();

       }

 

}

 

package blog;

 

public class Person {

       private String name;

       private int age;

       public Person(String name, int age) {

              this.name = name;

              this.age = age;

       }

 

       public int getAge() {

              return age;

       }

 

       public String getName() {

              return name;

       }

 

       public int hashCode() {

              return name.hashCode()*10+age;

       }

 

 

       public boolean equals(Object obj) {

       if(this==obj)return true;

       else{

              if(this.getClass()==obj.getClass())

              {

                     Person temp=(Person)obj;

                     if(this.name.equals(temp.getName())&&this.age==temp.getAge())

                            return true;

                     else return false;

 

              }

              else return false;

             

       }

       }

      

       public String toString()

       {

              return "姓名:"+name+"年龄:"+age;

       }

 

 

}

 

package blog;

 

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

 

public class Test {

 

       public static void main(String[] args) {

     TreeSet<Person> myset=new TreeSet<Person>(new MyComparator());

     Person person1=new Person("person1",12);

     Person person2=new Person("person2",32);

     Person person3=new Person("person1",12);

     Person person4=new Person("person4",11);

     Person person5=new Person("person5",22);

    

     myset.add(person1);

     myset.add(person2);

     myset.add(person3);

     myset.add(person4);

     myset.add(person5);

     showme(myset);

    

             

       }

       public static void showme(Set set)

       {   Iterator it=set.iterator();

              while(it.hasNext())

              {

                     Person temp=(Person)it.next();

                     System.out.println(temp);

              }

             

       }

 

}

以上两种排序一定要熟练掌握!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值