TreeSet()原理及使用
Posted 劲火星空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TreeSet()原理及使用相关的知识,希望对你有一定的参考价值。
1、TreeSet()是使用二叉树的原理对新add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。
2、Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自己定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数,才可以正常使用。
3、在覆写compare()函数时,要返回相应的值才能使TreeSet按照一定的规则来排序(升序,this.对象 < 指定对象的条件下返回-1)
(降序,this.对象 < 指定对象的条件下返回-1)升序是:比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
实例一:先比较年龄,年龄相同再比较姓名
package Compare;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest
public static void main(String args[])
Persontest per1 = new Persontest("zhangsan", 33);
Persontest per2 = new Persontest("lisi", 33);
Persontest per3 = new Persontest("wangwu", 22);
Persontest per4 = new Persontest("zhaoliu", 44);
TreeSet treeSet=new TreeSet();
treeSet.add(per1);
treeSet.add(per2);
treeSet.add(per3);
treeSet.add(per4);
Iterator iterator=treeSet.iterator();
while(iterator.hasNext())
Persontest t=(Persontest) iterator.next();
System.out.println(t.getName()+"的年纪是"+t.getAge());
class Persontest implements Comparable
private String name;
private int age;
public void setName(String name)
this.name = name;
public void setAge(int age)
this.age = age;
public String getName()
return this.name;
public int getAge()
return this.age;
public Persontest(String name, int age)
this.name = name;
this.age = age;
public int compareTo(Object obj)
Persontest per = (Persontest) obj;
if(per.age < this.age)
return -1;
if(per.age > this.age)
return 1;
if(per.age == this.age)
return this.name.compareTo(per.name);
return 0;
package Compare;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
// 需要在类中新建一个自己的比较器
public class TreeSetTest2
public static void main(String args[])
TreeSet ts = new TreeSet(new Human.Comp());
ts.add(new Human("zhangsan", 33));
ts.add(new Human("lii", 44));
ts.add(new Human("wangwu", 33));
ts.add(new Human("zhuliu", 55));
Iterator it = ts.iterator();
while(it.hasNext())
System.out.println(it.next());
class Human
private String name;
private int age;
public Human(String name, int age)
this.name = name;
this.age = age;
public String toString()
return "姓名:"+name+" 年龄:"+age;
static class Comp implements Comparator
public int compare(Object ob1, Object ob2)
Human h1 = (Human)ob1;
Human h2 = (Human)ob2;
int result = h1.age > h2.age ? 1 :(h1.age == h2.age ? 0 : -1);
if(result == 0)
result = h1.name.compareTo(h2.name);
return result;
实例三:利用TreeSet进行字符串中整形子元素的分割和排序
package Sort;
import java.util.Iterator;
import java.util.TreeSet;
//将字符串中的 整形数字排序
//如"23,32,22,1,-2,33"排序后输出
public class SortInt1
public static void main(String args[])
SortInt1 sortTest = new SortInt1();
String str = "33, 34, 77, 4, 56";// 在这里坑了宝宝半天啊,我习惯性的在逗号后边加了空格,结果就是一直报错
sortTest.SortTest(str);
public void SortTest(String str)
String strary[] = str.split(", "); // 这里也必须加空格才可以
TreeSet tre = new TreeSet();
for(int i = 0; i < strary.length; i++)
tre.add(Integer.parseInt(strary[i]));
// 再将整形数组转化成字符串输出
Iterator integer = tre.iterator();
StringBuffer strbuf = new StringBuffer();
while(integer.hasNext())
strbuf.append(integer.next()+", ");
strbuf.deleteCharAt(strbuf.length() - 1);
System.out.println("排序后的整形数组是:"+strbuf.toString());
实例四:相对于实例三,排序过程稍微调整
package Sort;
import java.util.Arrays;
/*
* 排序方式二
* 一、将字符串使用split()编程整形数组
* 二、使用Integer.parseInt()将字符串数组变成整形数组
* 三、使用Arrays.sort()对整形数组进行排序
* 四、将排序的好整形数组使用StringBuffer变成整形
* */
public class SortInt2
public static void main(String args[])
String str = "33, 34, 77, 4, 56";
SortInt2 sortTest = new SortInt2();
sortTest.SortTest(str);
public void SortTest(String str)
String strary[] = str.split(", "); //一、将字符串使用split()编程整形数组
int intary[] = new int [strary.length];
for(int i = 0; i < strary.length; i++)
intary[i] = Integer.parseInt(strary[i]);//二、使用Integer.parseInt()将字符串数组变成整形数组
Arrays.sort(intary);//第三、整形数组排序
StringBuffer strbuf = new StringBuffer();
for(int j = 0; j < intary.length; j++)
strbuf.append(intary[j]+", ");
strbuf.delete(strbuf.length() - 2, strbuf.length() - 1);
System.out.println(strbuf.toString());
前两个是TreeSet()的讲解,后两个是字符串通过split()分割成整形,然后再排序
以上是关于TreeSet()原理及使用的主要内容,如果未能解决你的问题,请参考以下文章