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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanglfree 中级黑马   /  2013-9-24 09:19  /  2482 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在JDK1.5版本以后,集合中可以添加基本数据类型,基本数据类型自动装箱拆箱,变成对象存入集合。
下面这个代码是TreeSet集合中关于比较的一个语句,为什么这里的s1.getAge()和s2.getAge()都是int型的数据,为什么不可以直接使用compareTo方法?而是需要封装成Integer对象才能使用。
return new Integer(s1.getAge()).compareTo (new Integer(s2.getAge()))

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

正序浏览
为什么这里的s1.getAge()和s2.getAge()都是int型的数据,为什么不可以直接使用compareTo方法?而是需要封装成Integer对象才能使用。
第一,int类型是一种基本数据类型,不能调用任何方法。只能通过对象调用方法。
第二,compareTo方法是Comparable接口中的方法,Integer类实现了Comparable接口,并且重写了compareTo方法进行自然排序。
所以:
      return new Integer(s1.getAge()).compareTo (new Integer(s2.getAge()))
是把两个int类型的数据封装成Integer对象,然后调用对象的方法进行比较排序。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
基本类型不能调用Integer的compareTo方法,必须封装成对象,才可以调用。可以直接相减。。
回复 使用道具 举报
里边接收的是Object类型的,你传一个基本类型肯定是不行了
回复 使用道具 举报
这里的CompareTo 方法是类Integer中的CompareTo方法,它比较的是对象,通过返回值类型来判断两个对象的大小。
回复 使用道具 举报
楼主,饿看了你的问题,饿刚刚自己敲了一下代码--->
import java.util.Comparator;
import java.util.TreeSet;


public class TreeSetDemo2 {

        public static void main(String[] args) {
                //TreeSet<Integer> tree = new TreeSet<Integer>();   //想看效果去注释,并把下面注释掉
                TreeSet<Integer> tree = new TreeSet<Integer>(new MyIntegerComparator());
                tree.add(1);
                tree.add(3);
                tree.add(2);
               
                System.out.println(tree);
        }

}

class MyIntegerComparator implements Comparator<Integer>{

        @Override
        public int compare(Integer o1, Integer o2) {
               
                return o2 - o1;   //自动拆箱
        }
       
}

弄清楚TreeSet为什么能排序,因为底层的数据结构是二叉树,楼主可以百度下二叉树的排序,那里不一定要转成Integer,直接向相减就可以了,我们使用Integer封装数据之后,调用compare 方法,这样看着更专业,其实跟做减法的效果是一样的,而 int 类型的数据是基本类型,没有 compare 这个方法,楼主应该看下 8 种基本数据类型跟他们的包装类型,还有String 类型,他们的区别,刚学的话弄清楚这些可以少走些弯路、、、

希望可以帮到楼主、、、

The you smile until forever 、、、、、、、、、、、、、、、、、、、、、

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1 赞一个!

查看全部评分

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