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);
}
Iteratoriter=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------------------");
Setset=newTreeSet();
for(inti=0;i<10;i++){
User2user=newUser2((i+1),"uname"+(i+1),"pswd"+(i+1));
set.add(user);
}
Iteratoriter=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----------------------
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!