TreeSet集合,
来源:互联网 发布:赤壁网络花店 编辑:程序博客网 时间:2024/06/02 04:46
/*
* TreeSet重点知识:
*定理1:在Set集合中,HashSet是无序的,而TreeSet存储元素是有序的,按照元素的ascll码进行排序。
*定理1.1:排序时,主要条件相同时,一定要判断次要条件。
* 定理 2.1:TreeSet中延续Set集合不能存储相同元素,保证元素唯一性的依据,通过compareTo方法比较主要和次要条件。
* 定理 3:TreeSet对元素存储时的两种排序方式。
* 定理 3.1:
* 排序的第一种方式:让元素自身具备比较性,实现comparable接口,覆盖compareTo方法。
* compareTo是按照字典顺序排序。
* 定理3.2:
*排序的第二种方式:元素不具备比较性,或者具备的比较性不是所需的。
* 这时要让集合自身具备比较性。* 集合初始化时就有了比较方式,定义比较器,将比较器作为参数传递给TreeSet集合的构造函数。
* 当两种排序都存在时,以比较器为主。
* 定义一个比较器(类),实现Comparator接口,覆盖compare方法。
*
*/
* 需求:
* 往TreeSet集合中存储自定义对象学生。
* 按照学生的年龄进行排序。
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public static void main(String[] args)
{
//存储字符串对象
/*
TreeSet ts=new TreeSet();
ts.add("abc");
ts.add("aaa");
ts.add("abb");
ts.add("acc");
*/
TreeSet ts=new TreeSet(new MyCompare());
ts.add(new Student("lisi01",11));
ts.add(new Student("lisi02",14));
ts.add(new Student("lisi07",12));
ts.add(new Student("lisi07",13));
Iterator it=ts.iterator();
while (it.hasNext())
{
//Object向下转型转成Studnet
Student s=(Student) it.next();
sop(s.getName()+"---"+s.getAge());
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
//定义学生类,并且继承Comparable接口
class Student implements Comparable
{
//定义私有成员变量,并且用构造函数初始化
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
//复写compareTo方法
public int compareTo (Object obj)
{
//判断obj是不是属于Student类
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s=(Student)obj;
//System.out.println(this.name+"--compareTO--"+s.name);
//对岸年龄进行比较
if(this.age>s.age)
return 1;
//如果age相同,则比较name
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class MyCompare implements Comparator
{
//实现Comparator接口,复写compare方法
public int compare(Object o1,Object o2){
//向下转型使用obj能调用Student的成员
Student s1=(Student)o1;
Student s2=(Student)o2;
//使用name进行比较
int num= s1.getName().compareTo(s2.getName());
//如果name相同则比较age
if(num==0)
{
return new Integer(s1.getAge()).compareTo(s2.getAge());
}
return num;
}
}
/*
* 练习:按照字符串长度排序。
* 字符串本身具备比较性,但是它的比较方式不是所需要的。
* 定义比较器进行比较
*/
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo1 {
public static void main(String args[]) {
//定义TreeSet容器,在构造函数里传递比较器
TreeSet ts=new TreeSet(new MyCompare1());
//添加自定义元素
ts.add("ab");
ts.add("abb");
ts.add("aba");
ts.add("abde");
ts.add("aaaqq");
ts.add("aaapp");
ts.add("a");
//定义ts的比较器
Iterator it=ts.iterator();
while (it.hasNext())
{
//直接输出字符串对象,不用向下转型
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
//定义一个构造器
class MyCompare1 implements Comparator{
public int compare(Object o1,Object o2)
{
//向下转型
String s1=(String) o1;
String s2=(String) o2;
//不安全的比较方式,不能保证比较器能正确的对容器里的元素进行排序。
/*if(s1.length()>s2.length())
return 1;
if(s1.length()==s2.length())
return 0;
return -1;*/
int num=new Integer(s1.length()).compareTo(s2.length());
//判断次要条件,当长度相同时,比较字符串的ascll码的大小。
if(num==0)
return s1.compareTo(s2);
return num;
}
}
- TreeSet 集合
- TreeSet集合,
- 集合 --- TreeSet
- TreeSet集合
- TreeSet集合
- 集合TreeSet
- TreeSet集合
- TreeSet集合
- TreeSet集合
- 集合-TreeSet
- 集合框架--TreeSet集合
- 集合框架-TreeSet集合
- 【集合】TreeSet类
- TreeSet,Comparator集合应用
- 集合系列----TreeSet
- Java 集合框架-TreeSet
- [黑马程序员]集合--TreeSet
- JAVA 集合类 TREESET
- 通过UIView来模拟 实现 Button的点击效果
- Android Studio 使用遇到的各种问题及解决方案汇总
- TCP协议中的三次握手和四次挥手(图解)&&TCP/IP 七层网络模型
- 简单字符串比较
- Android ListView&异步加载的学习(一)
- TreeSet集合,
- Cocos2dX设计模式之单例模式
- 27.UIStepper和UISlider
- vs 自动提示代码不选中
- 数据结构实验之链表七:单链表中重复元素的删除
- Uber高可用消息系统构建--总结自InfoQ
- [OpenCV]第一篇学习日记——环境配置
- [C++学习笔记]--友元、this指针
- bzoj-2038 小Z的袜子 hose