如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
如何比较对象的属性???Comparator与Comparable比较器有两种:在所比较的对象中实现Comparable,并实现compareTo方法与在其他的类中实现Comparator接口,并实现compare(equals可选)下面只是讨论在所需要比较的对象实现comparable接口如果需要把比较的方法移入已实现Comparator接口的类中即可1.浅度模拟:覆盖equals()方法为何要选择这个容器HashSet来模拟TreeSet呢??解:由于HashSet为避免元素的重复,从而会调用equals()那么我们可以对equals()方法做手脚---覆盖equals()方法(我们必须【调用equals时会调用hashCode方法】覆盖java.lang.Object中的hashCode()方法--将属性的特性(基本类型,反正产生的数字类型)或其哈希码(String))--写上所比较的属性,并返回boolean值。实例1:staticvoidcompareDemob(){//内部类AclassA{//利用构造器对其中的属性进行初始化A(Stringname,longID){this.name=name;this.ID=ID;}longID;Stringname;//覆盖java.lang.Object中的hashCode()方法publicinthashCode(){//return(int)ID;//将对象的属性ID作为对象哈希码return(int)name.hashCode();//将对象的属性name的哈希码作为对象哈希码}//覆盖java.lang.Object中的equals()方法publicbooleanequals(Objecto){Aa=(A)o;//将Object强制转换为相应的对象类型if(a==null)returnfalse;if(a.hashCode()==this.hashCode())returntrue;elsereturnfalse;}}HashSeths=newHashSet();Aa=newA("a",1);hs.add(a);a=newA("b",2);hs.add(a);a=newA("a",3);hs.add(a);a=newA("a",1);hs.add(a);a=newA("c",1);hs.add(a);//遍历容器中的元素for(Iteratoriterator=hs.iterator();iterator.hasNext();){Aaa=(A)iterator.next();System.out.println("ID:"+aa.ID+"name:"+aa.name);}}2.深度模拟:模拟HashSet实现比较对象的属性这次用ArrayList来模拟,而不是HashSet我们还有一种方法手工模拟equals方法--实则是覆盖equals方法。具体方法:在对象中写一个compareTo()方法;并在其中将比较的属性放入其中,并返回一个int,如果两个对象的属性相同(注:String类型的属性则不需要重写---String中已实现Comparator接口),两者的比较后的结果是int类型的返回值实例2:staticvoidcomparatorDemoa(){classTe{Te(Stringname,longID){this.name=name;this.ID=ID;}longID;Stringname;//写一个compareTo方法---注:该类并没有Comparable接口publicintcompareTo(Objectt){Teo=(Te)t;//return(int)(this.ID-o.ID);//上下行的代码功能相同//return(int)(o.ID-this.ID);//由于String中已实现了CompareTo方法类型的数据return(int)(this.name.compareTo(o.name));}}//声明一个HashSet的容器//HashSeths=newHashSet();Arra