Java 从Set里面取出有序的记录详解及实例
Java从Set里面取出有序的记录详解及实例
Set里面的记录是无序的,如果想使用Set,然后又想里面的记录是有序的,就可以使用TreeSet,而不是HashSet,在使用TreeSet的时候,里面的元素必须是实现了Comparable接口的,TreeSet在进行排序的时候就是通过比较它们的Comparable接口的实现!
下面是HashSet的无序和TreeSet的有序的比较:
Test类:
importjava.util.HashSet; importjava.util.Iterator; importjava.util.Set; importjava.util.TreeSet; publicclassTest{ publicstaticvoidmain(Stringargs[]){ useHashSet(); useTreeSet(); } /** *Set默认是无序的,一般从Set里面拿出来的数据每次的顺序都会是不一样的,如果想里面的顺序一样 *就使用TreeSet */ publicstaticvoiduseHashSet(){ System.out.println("-----------------HashSetStart------------------"); Setset=newHashSet (); for(inti=0;i<10;i++){ Useruser=newUser((i+1),"uname"+(i+1),"pswd"+(i+1)); set.add(user); } Iterator iter=set.iterator(); while(iter.hasNext()) System.out.println(iter.next()); System.out.println("------------------HashSetEnd----------------------"); } /** *TreeSet是有序的,TreeSet在给里面的元素排序是通过它们的Comparable接口的实现来比较的,所以, *如果里面的对象没有实现Comparable接口,则TreeSet在运行时就会报错,所以如果想从Set里面拿出来的数据是 *有序的就得使里面的对象实现Comparable接口,User2是实现了Comparable接口的,并对它们的id进行比较,id大 *的就会排在后面 */ publicstaticvoiduseTreeSet(){ System.out.println("-----------------TreeSetStart------------------"); Set set=newTreeSet (); for(inti=0;i<10;i++){ User2user=newUser2((i+1),"uname"+(i+1),"pswd"+(i+1)); set.add(user); } Iterator iter=set.iterator(); while(iter.hasNext()) System.out.println(iter.next()); System.out.println("------------------TreeSetEnd----------------------"); } }
User类:
publicclassUser{ privateintid; privateStringusername; privateStringpassword; publicUser(){ } publicUser(intid,Stringusername,Stringpassword){ this.id=id; this.username=username; this.password=password; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } @Override publicinthashCode(){ finalintprime=31; intresult=1; result=prime*result+id; returnresult; } @Override publicbooleanequals(Objectobj){ if(this==obj) returntrue; if(obj==null) returnfalse; if(getClass()!=obj.getClass()) returnfalse; Userother=(User)obj; if(id!=other.id) returnfalse; returntrue; } @Override publicStringtoString(){ return"id="+id+",\r\nusername="+username +",\r\npassword="+password; } }
User2类:
publicclassUser2implementsComparable{ privateintid; privateStringusername; privateStringpassword; publicUser2(){ } publicUser2(intid,Stringusername,Stringpassword){ this.id=id; this.username=username; this.password=password; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } @Override publicinthashCode(){ finalintprime=31; intresult=1; result=prime*result+id; returnresult; } @Override publicbooleanequals(Objectobj){ if(this==obj) returntrue; if(obj==null) returnfalse; if(getClass()!=obj.getClass()) returnfalse; User2other=(User2)obj; if(id!=other.id) returnfalse; returntrue; } @Override publicStringtoString(){ return"id="+id+",\r\nusername="+username +",\r\npassword="+password; } @Override publicintcompareTo(User2user){ //TODOAuto-generatedmethodstub //这里我的实现是按照id进行排序 if(user==null) return1; if(id>user.getId()) return1; elseif(id==user.getId()) return0; else return-1; } }
运行结果:
-----------------HashSetStart------------------ id=3, username=uname3, password=pswd3 id=4, username=uname4, password=pswd4 id=1, username=uname1, password=pswd1 id=2, username=uname2, password=pswd2 id=7, username=uname7, password=pswd7 id=8, username=uname8, password=pswd8 id=5, username=uname5, password=pswd5 id=6, username=uname6, password=pswd6 id=9, username=uname9, password=pswd9 id=10, username=uname10, password=pswd10 ------------------HashSetEnd---------------------- -----------------TreeSetStart------------------ id=1, username=uname1, password=pswd1 id=2, username=uname2, password=pswd2 id=3, username=uname3, password=pswd3 id=4, username=uname4, password=pswd4 id=5, username=uname5, password=pswd5 id=6, username=uname6, password=pswd6 id=7, username=uname7, password=pswd7 id=8, username=uname8, password=pswd8 id=9, username=uname9, password=pswd9 id=10, username=uname10, password=pswd10 ------------------TreeSetEnd----------------------
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!