黑马程序员技术交流社区

标题: TreeSet如何加入不同对象 [打印本页]

作者: 我是小白    时间: 2013-3-26 21:43
标题: TreeSet如何加入不同对象
List集合中可以传进去不同的对象,HashSet也可以传进去不同的对象,但是对于TreeSet,请问如何传进去不同的对象?如果是自己写的类,实现Comparable接口,第一件事就是判断是否同一个类,然后抛异常——还是说,TreeSet就没打算让你传进去不同的值,使用TreeSet必须加泛型?
作者: itserious    时间: 2013-3-26 21:59
为了让你的代码健壮性更好,
你先判断 obj (传那个参数)
用重写comareTo方法为例:
下面是步骤
if(obj==null){return; 或抛异常}
if(obj instanceof  XX){return; 或抛异常}
if(this.class==obj.classl){return; 或抛异常}
XX xx=(XX)obj;这一步是用来强转。

接下来才是你的判断对象属性是否相等的语句
…………
…………
作者: 张豪杰    时间: 2013-3-26 22:02
存TreeSet集合里的元素,必须要满足两个条件中的其中一个
要么是,元素具备比较性,也就是实现了Comparable接口
要么是,先自定义一个比较器,当存元素的时候,调用定义好的比较器
不然的话,TreeSet怎么知道你存入的元素是不是同一个?
作者: 寇弘禄    时间: 2013-3-26 23:43
TreeSet集合是是不允许元素重复的,保证元素唯一性的方法有两种,一个是实现comparable接口并覆写里面的compareTo方法。
如果实现接口时加泛型的话,那么compareTo方法中的参数要和泛型是同一类型。
class A implements Comparable<String>
{
        public int compareTo(String o) {
                return 0;
        }
}
另一种是在TreeSet中传入比较器。比较器的定义方法是第一一个类实现Comparator 并覆写里面的compare方法。
class A implements Comparator<String>
{
        public int compare(String o1, String o2) {
                return 0;
        }
}

作者: 聂益飞    时间: 2013-3-27 00:33
首先,没有任何一种集合或是代码要你必须加泛型,我们加泛型的目的是避免强转,让代码更便于阅读!!你不加泛型,这个集合你照样写得出来!
Set集合都要求元素是唯一的!!TreeSet集合是二叉树的数据结构!元素是有序的,不管你是对象还是其他什么,如何让元素有序?这就要求元素本身具备比较性,也就是继承Comparable类,覆写CompareTo方法。或是定义比较器,实现Comparetor接口让集合本身具备比较性!!如果你是相同的对象,是不能进入TreeSet集合的!不会丢异常,只是你发现根本没加进去!
作者: 罗胜华    时间: 2013-3-27 01:57
你这个问题问的不是很专业:
首先你List可以存不同的对象,这是必须可以的
java中所有的集合都可以存不同的对象,HashSet和TreeSet可以避免存入相同的对象,HashSet使用的方法是:被存入的对象必须重写hashcode方法,然后再根据equals()方法判断是否相同,如果相同,就覆盖, TreeSet是根据二叉树算法,实现了comparable接口,重写compareTo()方法可以避免存入相同的对象。

最后,我想跟你说,泛型这个概念:泛型是jdk1.5的新特性,如果一个集合加了泛型,那么这个集合里面只能存泛型中所指的类型
比如: List<String> list = new ArrayList<String>();
那么list中只能存字符串
最后补充一点:泛型是配合增强for循环 对集合进行迭代。  希望你能听明白我说什么!!





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