TreeSet类
来源:互联网 发布:php o2o系统 编辑:程序博客网 时间:2024/06/14 13:57
底层使用了红黑树(二叉树)数据结构实现的,特点:会对元素进行排序存储。
使用treeSet要注意的事项:
1.往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储。
2.往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,把元素的比较规则定义
在compareTo(T o)方法上。
3.如果比较元素的时候,compareTo()返回的是0, 那么该元素就被视为重复元素,不允许添加。(注意:TreeSet与HashCode、equals方法没有任何关系)
4.往TreeSet添加元素的时候,如果元素本身没有具备自然顺序的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个比较器。
如何定义比较器:自定义一个类实现Comparator接口即可,把元素与元素之间的比较规则定义在cpmpare方法内即可。
自定义比较器的格式:
class 类名 implements Comparator{
}
5.如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了Comparable接口,在创建TreeSet对象的时候也传入了比较器,那么是
以比较器的比较规则优先使用。
package com.cn.set;
import java.util.Comparator;
import java.util.TreeSet;
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年7月16日16:47:23
* Desc:2016年7月16日16:47:26
* 使用treeSet要注意的事项:
* 1.往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储。
* 2.往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,把元素的比较规则定义
* 在compareTo(T o)方法上。
* 3.如果比较元素的时候,compareTo()返回的是0, 那么该元素就被视为重复元素,不允许添加。(注意:TreeSet与HashCode、equals方法没有任何关系)
* 4.往TreeSet添加元素的时候,如果元素本身没有具备自然顺序的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个比较器。
* 如何定义比较器:自定义一个类实现Comparator接口即可,把元素与元素之间的比较规则定义在cpmpare方法内即可。
* 自定义比较器的格式:
* class 类名 implements Comparator{
*
* }
* 5.如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了Comparable接口,在创建TreeSet对象的时候也传入了比较器,那么是
* 以比较器的比较规则优先使用。
*
* 推荐使用:比较器(Comparator)。。。。因为复用性
*
*/
//自定义一个比较器
class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Emp e1 = (Emp)o1;
Emp e2 = (Emp)o2;
return e1.id-e2.id;
}
}
class Emp implements Comparable{
int id;
String name;
double salary;
public Emp(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "{" + this.id +" " + this.name + " " + this.salary + "}";
}
@Override//元素与元素之间的比较规则
//负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
public int compareTo(Object o) {
Emp e = (Emp)o;
System.out.println(this.name + "与" + e.name + "进行比较");
return new Double(this.salary - e.salary).intValue();//double转换成int
}
}
public class Demo3 {
public static void main(String[] args) {
//创建一个比较器对象
MyComparator myComparator = new MyComparator();
//创建TreeSet的时候传入比较器
TreeSet treeSet = new TreeSet(myComparator);
/*treeSet.add(1);
treeSet.add(2);
treeSet.add(4);
treeSet.add(4);
treeSet.add(3);
treeSet.add(0);
treeSet.add('c');
treeSet.add('a');
treeSet.add('d');*/
treeSet.add(new Emp(110, "木先森", 500));
treeSet.add(new Emp(120, "小龙女", 900));
treeSet.add(new Emp(230, "杨过", 200));
treeSet.add(new Emp(340, "习近平", 400));
treeSet.add(new Emp(70, "刘先生", 190));
treeSet.add(new Emp(170, "哈哈哈", 190));
System.out.println(treeSet);
}
}
TreeSet是可以对字符串进行排序的,因为字符串已经实现了Comparable接口。
字符串的比较规则:
情况1:对应位置上有不同的字符出现,比较的就是对应位置上不同的字符。
情况2:对应位置上的字符都一样,比较的就是字符串的长度。
package com.cn.set;
import java.util.TreeSet;
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年7月17日13:31:45
* Desc:
* TreeSet是可以对字符串进行排序的,因为字符串已经实现了Comparable接口。
*
* 字符串的比较规则:
* 情况1:对应位置上有不同的字符出现,比较的就是对应位置上不同的字符。*
* 情况2:对应位置上的字符都一样,比较的就是字符串的长度。
*/
public class Demo4 {
public static void main(String[] args) {
TreeSet treeSet = new TreeSet();
/*treeSet.add("abcccccccccccccccccccccc");
treeSet.add("abw");
treeSet.add("abc");
treeSet.add("ab");
System.out.println(treeSet);
*/
System.out.println("abw".compareTo("abcccccccccccccccccc"));//左边的大
}
}
利用TreeSet排序的例子:
package com.cn.set;
import java.util.Iterator;
import java.util.TreeSet;
/**
* Author:Liu Zhiyong
* Version:Version_1
* Date:2016年7月17日16:15:03
* Desc:
* 将字符串中的数值进行排序:
* 例如:String str = "8 10 15 5 2 7"; ---> "2 5 7 8 10 15"
*/
public class Demo5 {
public static void main(String[] args) {
String str = "8 10 15 5 2 7";
String[] strArray = str.split(" ");
TreeSet treeSet = new TreeSet();
for(int i=0; i<strArray.length; i++){
//treeSet.add(new Integer(strArray[i]).intValue());//字符串转int类型数据
treeSet.add(new Integer(Integer.parseInt(strArray[i])));//字符串转int类型数据,才能正常排序
}
Iterator iterator = treeSet.iterator();
//StringBuffer sb = new StringBuffer();
while(iterator.hasNext()){
//Integer str2 = (Integer)iterator.next();
//sb.append(str2 + " ");
System.out.print(iterator.next() + " ");
}
//String newStr = sb.toString();
//System.out.println(newStr);
}
}
0 0
- TreeSet类
- TreeSet类
- TreeSet类
- TreeSet类
- treeset类
- 类 TreeSet<E> 遍历 TreeSet<String> 和TreeSet<Person>
- 【集合】TreeSet类
- Java TreeSet类
- JAVA 集合类 TREESET
- TREEset的模板类
- TreeSet类源码解析
- 集合类2-TreeSet
- TreeSet类的排序
- TreeSet类练习
- TreeSet
- TreeSet
- TreeSet
- TreeSet
- 【SSH网上商城项目实战09】添加和更新商品类别功能的实现
- 坑了我一个小时的脚本执行
- Spring 注解
- Android自定义view之- BitMap的绘制
- 数据结构之链表
- TreeSet类
- leetcode 238 Product of Array Except Self
- Http协议
- Azure Messaging-ServiceBus Messaging消息队列技术系列4-复杂对象消息是否需要支持序列化和消息持久化
- 进程优先队列
- Swap Nodes in Pairs
- 泛型
- Linux笔记
- Java系列(一)Annotation(注解)