黑马程序员技术交流社区

标题: TreeSet的排序问题 [打印本页]

作者: 彭宾    时间: 2012-12-22 01:07
标题: TreeSet的排序问题
大家在操作集合的时候往往没在意一些方法的底层实现,各种集合判断的方式不一样,这取决于他们的存储方式,比如TreeSet集合如何判断相同元素的呢?contains方法和remove方法在底层都调用了这些方法

下面看具体的例子:    假设我们以年龄和姓名相同的为同一个人
   import java.util.*;

class TreeSetDemo
{
public static void main(String[] args)
{
  TreeSet<Person> ts=new TreeSet<Person>(new MyComparator());
  ts.add(new Person("pengbin02",20));
  ts.add(new Person("pengbin05",20));
  ts.add(new Person("pengbin03",30));
  ts.add(new Person("pengbin03",40));
  Iterator<Person> it=ts.iterator();
  while(it.hasNext())
  {
   Person p=it.next();
   System.out.println(p.getName()+"...."+p.getAge());
  }
}
}

class Person implements Comparable<Person>
{
private String name;
private int age;
public Person(String name,int age)
{
  this.name=name;
  this.age=age;  
}
public String getName()
{
  return name;
}
public int getAge()
{
  return age;
}
/*
  定义一个方法按照年龄排序(从小到大),如果年龄相同则按照姓名排序
*/
public int compareTo(Person p)
{
  /*if(this.age>p.age)
   return 1;
  if(this.age==p.age)
   return this.name.compareTo(p.name);
  return -1;*/
  System.out.println(this.name+"...compareto..."+p.name);
  int num=new Integer(this.age).compareTo(new Integer(p.age));
  if(num==0)
   return this.name.compareTo(p.name);
  return num;
}

}
/*
  定义一个比较器
*/
class MyComparator implements Comparator<Person>
{
/*
  覆盖Comparator的compare方法,按照姓名排序
  ,如果姓名相同则按照年龄排序(从小到大)
*/
public int compare(Person p1,Person p2)
{
  int num=p1.getName().compareTo(p2.getName());
  if(num==0)
   return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
  return num;
}
}


作者: 高会仁    时间: 2012-12-22 01:12
{:soso_e199:}{:soso_e129:}{:soso_e141:}
作者: 2012    时间: 2013-9-1 14:00
contains,remove底层都调用了equals方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2