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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 移动小坦克 中级黑马   /  2013-3-15 03:59  /  1383 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩松范 于 2013-3-15 09:53 编辑

为了让集合自身具备比较功能,我们在生成TreeSet集合时,会传入一个比较器
该比较器说白了,就是一个实现Comparator接口的类生成的对象。该类复写了
int compare(Object o1,Object o2) 方法,那么我想问的是,集合内部是怎样
调用Comparator对象的compare方法的,我想在add方法调用时,肯定是调用了compare方法
有人研究过原代码吗?
        

点评

如果问题已经解决了,请将分类改为已解决;一定要对别人的回答有相应的回复哦,谢谢  发表于 2013-3-15 08:44

4 个回复

倒序浏览
//set
public class set
{
     private Conparator c;
      public set(){};
      public  set(Comparator c)
{
      this.c=c;
}
public void add(Object 0)
{
   for(int i=0;i<=this.size();i++)
{
//采用插入排序法,插入该值
}
}
}
回复 使用道具 举报
补充:插入排序时采用Comparator的比较方法比较大小。
回复 使用道具 举报
刚刚看了看,这个TreeSet是用TreeMap来实现的,键是不重复的,值为空

首先构造时:
  1. public TreeSet(Comparator<? super E> comparator) {
  2.         backingMap = new TreeMap<E, Object>(comparator);
  3.     }
复制代码
然后赋值:
  1. public TreeMap(Comparator<? super K> comparator) {
  2.         if (comparator != null) {
  3.             this.comparator = comparator;
  4.         } else {
  5.             this.comparator = (Comparator<? super K>) NATURAL_ORDER;
  6.         }
  7.     }
复制代码
当调用put方法时:
  1. @Override public V put(K key, V value) {
  2.         return putInternal(key, value);
  3.     }
复制代码
在putInternal这个方法里有一个查找节点位置的方法find
在find方法里它会获取到一个comparison的int类型的比较结果
根据判断结果进行排序。(方法比较长,我就不贴了,有兴趣自己查查看)

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
fighting 发表于 2013-3-15 07:41
刚刚看了看,这个TreeSet是用TreeMap来实现的,键是不重复的,值为空

首先构造时:然后赋值:当调用put方 ...

牛。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马