A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

彭宾

初级黑马

  • 黑马币:0

  • 帖子:9

  • 精华:0

© 彭宾 初级黑马   /  2012-12-22 01:07  /  1490 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家在操作集合的时候往往没在意一些方法的底层实现,各种集合判断的方式不一样,这取决于他们的存储方式,比如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;
}
}

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
古银平 + 1 神马都是浮云
高会仁 + 3 很给力!

查看全部评分

2 个回复

倒序浏览
{:soso_e199:}{:soso_e129:}{:soso_e141:}
回复 使用道具 举报
contains,remove底层都调用了equals方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马