免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1537 | 回复: 2
打印 上一主题 下一主题

【求助】关于TreeSet的一些问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-25 22:13 |只看该作者 |倒序浏览
注释的部分是我第一次写的程序,我现在的问题有两个:
      第一,用TreeSet的时候,如果想改变它默认的排序顺序,是不是应该自定义一个类来实现Comparable接口,那一定要实现它的一个compareTo()方法,那为什么还要写hashcode()和equals()两个方法?
    第二,我如果写成现在的这个样子(不包含注释的那个新代码),我理解的是按TreeSet的默认方式进行排序,那为什么就不用实现Comparable接口呢?
import java.util.*;
public class CollectionTest1{
        public static void main( String[] args ){
                TreeSet set = new TreeSet();
                int[] Array = { 4,7,2,8,0,1, 5} ;
                for( int i = 0 ; i < Array.length ; i++ ){
                        //set.add( new MyNumber( array ) );
                        set.add( new Integer(Array) );
                }

                System.out.println( "size = " + set.size() );

                System.out.println( "size = " + set.size() );

                Iterator i = set.iterator();

                while( i.hasNext() ){
                   Object o = i.next();
                          System.out.println( o );
                }
        }
}

/*class MyNumber implements Comparable{
        private int i = 0 ;

        public MyNumber( int i ){
                this.i = i ;
        }

        public String toString( ){
                return "" + i ;
        }

        public int hashCode(){
                System.out.println( "invoke hashCode" );
                return new Integer( i ).hashCode();               
        }

        public boolean equals( Object o ){
                System.out.println( "invoke equals" );
                if( !( o instanceof MyNumber) ){
                        return false ;
                }

                MyNumber mn = ( MyNumber ) o ;
                return this.i == mn.i ;
        }

        public int compareTo( Object o ){
                   if( !( o instanceof MyNumber) ){
                return -1 ;
                    }

                    MyNumber mn = ( MyNumber )o ;
                    return  mn.i - this.i ;
        }
}*/

论坛徽章:
0
2 [报告]
发表于 2005-05-26 05:55 |只看该作者

【求助】关于TreeSet的一些问题

Comparater里面hashcode()和equals()本来不是必须的,如果现在新版本或者你的开发工具要求必须完成的话,那就写一下也无妨。

TreeSet 和TreeMap有默认的Comparater,如果你要自定义顺序,才需要提交一个Comparater

论坛徽章:
0
3 [报告]
发表于 2005-05-26 17:32 |只看该作者

【求助】关于TreeSet的一些问题

谢谢,我昨天又看了一下API
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP