TreeSet要求加入的所有元素都可以相互比较大小;可以控制比较位置来决定排序方向;hashset只能比较可相等不能比较大小
来源:互联网 发布:淘宝翡翠手镯 编辑:程序博客网 时间:2024/06/08 04:16
TreeSet要求加入的所有元素都可以相互比较大小。它通过比较过程中返回0来判定出重复的元素。
元素间比较大小有两种处理方案:(1)可以通过元素本身的类实现Comparable来自我解决。 (2)可以通过引用外部的专门的“裁判类”来裁决两个元素的大小关系。
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/*class Person implements Comparable{
private int age;
private String name;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public int compareTo(Object o) {
// 若不是person类型,或者相等都让返回0(发生碰撞),相等的情况就不添加
if ((o instanceof Person)==true) {
Person p=(Person)o;
int t=this.name.compareTo(p.name);
if(t!=0)return t;
return this.age-p.age;
}
return 0;
}
public String toString() {
return name+" is "+age;
}
}*/
class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String toString() {
return name+" is "+age;
}
}
/**
* 裁判类又称比较器
* @author lenovo
*
*/
class K implements Comparator{
public int compare(Object o1, Object o2) {
// 若不是person类型,或者相等都让返回0,相等的情况就不添加
if ((o1 instanceof Person)==true&&(o2 instanceof Person)==true) {
Person p1=(Person)o1;
Person p2=(Person)o2;
int t=p2.getName().compareTo(p1.getName());
if (t!=0) {
return t;
}
return p2.getAge()-p1.getAge();
}
return 0;
}
}
/**
* 除了string,必须对一般类实现比较接口或者用外部裁判类
* @author lenovo
*
*/
public class TreeSetTest {
public static void main(String[] args) {
//string的内容放在字符串区,String本身就实现了comparable,直接比较内容
/*Set<String> a=new TreeSet<String>();
a.add("abc");
a.add("xyz");
a.add("abc");
System.out.println(a);*/
//第一种实现comparable接口
/*Set<Person> b=new TreeSet<Person>();
b.add(new Person("kane",10));
b.add(new Person("kane",11));//若未实现comparable,添加第二个时就会报错
b.add(new Person("kane",10));
b.add(new Person("li",10));
b.add(new Person("hao",11));
b.add(new Person("hao",12));
b.add(new Person("hao",13));
//先名称再年龄都是排序输出,因为是通过比较实现的
System.out.println(b);*/
//第二种非侵入方式
Set<Person> b=new TreeSet<Person>(new K());//应用外部裁判类,否则添加第二个时就会报错
b.add(new Person("kane",10));
b.add(new Person("kane",11));
b.add(new Person("kane",10));
b.add(new Person("li",10));
b.add(new Person("hao",11));
b.add(new Person("hao",12));
b.add(new Person("hao",13));
//先名称再年龄都是排序输出,因为是通过比较实现的,和上面的顺序不同,因为前后位置调了下
System.out.println(b);
}
}
- TreeSet要求加入的所有元素都可以相互比较大小;可以控制比较位置来决定排序方向;hashset只能比较可相等不能比较大小
- 数组元素比较大小
- hashset和treeset的比较
- HashSet,LinkedHashset,TreeSet的比较
- HashSet和TreeSet的比较
- TreeSet与HashSet比较
- 比较HashSet和TreeSet
- HashSet TreeSet比较
- javascript可以直接比较时间字符串的大小
- javascript可以直接比较时间字符串的大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 比较大小
- 黑马程序员_Java基础加强笔记:类加载器
- Android中关于Volley的使用(八)缓存机制的深入认识
- The h.264 Bitstream(h.264码流)
- java基础08
- TM波段组合
- TreeSet要求加入的所有元素都可以相互比较大小;可以控制比较位置来决定排序方向;hashset只能比较可相等不能比较大小
- c 语言中的位域
- java异常处理机制
- JFrame显示层次问题
- hdu1247字典树
- 用C语言编程操作计算机串口的问题
- 三角形面积
- Ubuntu下安装gnuplot4.6.0
- UltraEdit 给代码注释添加快捷键