Java_基础—TreeSet保证元素唯一和自然排序
2017-07-15 15:26
399 查看
TreeSet存储自定义对象时,必须使该对象实现Comparable接口,并重写该方法。
二叉树:小的存储在左边(负数),大的存储在右边(正数),相等就不存(0)
compareTo方法,在TreeSet集合如何存储元素取决于 compareTo方法的返回值
返回0,集合中只有一个元素
返回-1,集合会将存储的元素倒叙
返回1,集合怎么存就怎么取
自定义一个Person类,属性为name, age
定义一个TreeSet类
public class Person implements Comparable<Person>{ @Override public int compareTo(Person o) { //return 0; //返回0,集合中只有一个元素 return 1; //返回1,集合怎么存就怎么取 //return -1; //返回-1,集合会将存储的元素倒叙 } }
二叉树:小的存储在左边(负数),大的存储在右边(正数),相等就不存(0)
compareTo方法,在TreeSet集合如何存储元素取决于 compareTo方法的返回值
返回0,集合中只有一个元素
返回-1,集合会将存储的元素倒叙
返回1,集合怎么存就怎么取
自定义一个Person类,属性为name, age
package com.soar.bean; public class Person implements Comparable<Person>{ private String name; private int age; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } //Alt + Shift + S → Generate hashCode() and equals()方法 /* * final int prime = 31; * 为什么是31? * ①31是个质数,质数是能被1和自己本身整除的数 * ②31这个数既不大也不小 * ③31这个数好算,2的五次方-1,2向左移动5位 */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) //调用的对象和传入的对象是同一个对象 return true; //直接返回true if (obj == null) //传入的对象为null return false; //返回false if (getClass() != obj.getClass()) //判断两个对象对应的字节码文件是否是同一个 return false; //如果不是,直接返回false Person other = (Person) obj; //向下转型 if (age != other.age) //调用对象的年龄不等于传入对象的年龄 return false; //返回false if (name == null) { //调用对象的姓名为null if (other.name != null) //传入对象的姓名不为null return false; //返回flase } else if (!name.equals(other.name)) //调用的姓名不等于传入对象的姓名 return false; //返回false return true; //返回true } @Override public int compareTo(Person o) { int num = this.age - o.age; //年龄是比较的主要条件 return num == 0 ? this.name.compareTo(o.name) : num; //姓名是比较的次要条件 } }
定义一个TreeSet类
package com.soar.set; import java.util.TreeSet; import com.soar.bean.Person; public class Demo3_TreeSet { /* *A:案例演示 * TreeSet存储Integer类型的元素并遍历 * TreeSet集合是用来对元素进行排序的,同样他也可以保证元素的唯一 * 当compareTo方法返回0的时候,集合中只有一个一个元素 * 当compareTo方法返回正数的时候,集合会怎么存就怎么取 * 当compareTo方法返回负数的时候,集合会倒序存储 */ public static void main(String[] args) { //add(); TreeSet<Person> ts = new TreeSet<>(); ts.add(new Person("张三",23)); ts.add(new Person("李四",24)); ts.add(new Person("王五",25)); ts.add(new Person("赵六",26)); ts.add(new Person("周七",26)); System.out.println(ts); } private static void add() { TreeSet<Integer> ts = new TreeSet<>(); ts.add(1); ts.add(2); ts.add(2); ts.add(3); ts.add(3); System.out.println(ts); } }
相关文章推荐
- Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解
- Java基础知识强化之集合框架笔记47:Set集合之TreeSet保证元素唯一性和比较器排序的原理及代码实现(比较器排序)
- TreeSet保证元素唯一并实现排序的原理
- 集合框架-TreeSet保证元素唯一性和自然排序的原理和图解
- TreeSet保证元素唯一并实现排序的原理
- Treeset保证元素唯一且排序的代码示例
- 集合框架_TreeSet保证元素唯一性和自然排序的原理和图解(二叉树结构)
- TreeSet存储元素自然排序和唯一的代码及图解
- TreeSet存储元素自然排序和唯一的图解
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序)
- Java - TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
- Java_Map插入自定义数据类型保证元素唯一
- java--基础----HashSet保证元素的唯一性
- 集合的特殊功能之TreeSet集合如何保证元素的唯一及排序的
- TreeSet保证元素的 排序和唯一性 的原理
- TreeSet存储自定义对象并保证排序和唯一
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序)
- JAVA代码—算法基础:计算已排序的数组中不重复的元素个数
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
- 【java】TreeSet的自然排序