Java语言-26:TreeSet集合

1、TreeSet集合:

                    TreeSet集合是Set接口的另一个实现类,内部采用自平衡的排序二叉树来存储元素,这样的结构可以保证TreeSet集合中没有重复的元素,并且可以对元素进行排序:

2、TreeSetD的二叉存储结构:

                                每个节点最多有两个子节点的有序树,左侧的称为左子树,右侧的称为右子树。

将集合的第一个元素取出作为跟节点,然后依次取出后面的元素,若大于根节点,则放在右子树,小于,则放在左子树,重复元素不添加。下面用一个图来表示:

    

3、代码实现(验证其特点功能)

    代码一:未达到排序作用

package TreeSet;


import java.util.TreeSet;


/*
 * 需求:验证二叉树的功功能
 * */
public class TreeSet_one {


public static void main(String[] args) {
//创建TreeSet集合
TreeSet<String>tree = new TreeSet<String>();

//向集合中添加元素
tree.add("hello");
tree.add("java");
tree.add("world");
tree.add("very");

//遍历并打印
for(String s:tree){
System.out.println(s);
}
/*
* 输出:
*  hello
java
very
world
可以看出遍历出的字符串元素按照顺序输出,并未达到排序的效果。
* */




}


}

        代码二:达到排序效果,且无重复元素(Integer):自然排序

            package TreeSet;


/*
 * 需求:对集合进行自然排序
 * */
import java.util.TreeSet;


public class TreeSet_Integer {


public static void main(String[] args) {
//创建Set集合
TreeSet<Integer>set = new TreeSet<Integer>();

//向集合中添加元素
set.add(10);
set.add(10);
set.add(20);
set.add(20);
set.add(30);
set.add(30);
set.add(100);

//遍历该集合并打印
for(Integer i:set){
System.out.println(i);
/*
* 输出:   10
20
30
100
无重复,升序排列


* */
}
}


}

        代码三:达到排序效果,并无重复元素(调用Comparable接口的compareTo()方法):比较排序法;

package TreeSet;


//Student类实现Comparable接口
public class Student implements Comparable<Student> {
String name;
int age;


public Student() {
super();
// TODO Auto-generated constructor stub
}


public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}






// 重写comparaTo()方法
@Override
public int compareTo(Student s) {
// 现要比较定义参数的比较方法,设定规则,name字符串长度按从小到大的顺序排列
int number = this.name.length() - s.name.length();
// 如何去重
// name的字符串长度一致
int number1 = number == 0 ? this.name.compareTo(s.name) : number;
// name和age都相同
int number2 = number1 == 0 ? this.age - s.age : number1;
return number2;
}

}

package TreeSet;


import java.util.TreeSet;


/*
 * 集合中的元素想要对元素进行排序,就会调用CompareTo()方法,该方法是Comparable接口中定义的,因此若排序,就需要调用Comparable接口。
 * 创建一个自定义类来看该接口和该方法的作用
 * */
public class TreeSet_comparable {
public static void main(String[] args) {
//创建TreeSet集合
TreeSet<Student>trees = new TreeSet<Student>();

//创建学生对象
Student s1 = new Student("zhangsan",18);
Student s2 = new Student("zhangsan",19);
Student s3 = new Student("zhangsan",18);
Student s4 = new Student("李四",18);
Student s5 = new Student("李四",20);
Student s6 = new Student("lisi",18);
Student s7 = new Student("李四",18);

//想集合中添加元素
trees.add(s1);
trees.add(s2);
trees.add(s3);
trees.add(s4);
trees.add(s5);
trees.add(s6);
trees.add(s7);

//遍历
for(Student s:trees){
System.out.println(s.name+"----"+s.age);
}
}
}

猜你喜欢

转载自blog.csdn.net/qq_41833394/article/details/80247804