TreeSet是依靠TreeMap来实现的
TreeSet是一个有序集合,她的元素 按照升序排列,默认是按照自然顺序排列,也就是说TreeSet中的对象元素需要实现Comparable接口。
TreeSet类中跟HashSet类一样也没有get()方法来获取列表中的元素,所以也只能通过迭代器方法来获取。
import java.util.*;
public class TreeSetTest
{
public static void main(String[] args)
{
TreeSet tr =new TreeSet();
tr.add("zhangshan");
tr.add("wangwu");
tr.add("lisi");
Iterator it =tr.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
上面打印结果为:lisi wangwu zhangshan 这时因为TreeSet是一个有序并且默认按自然顺序排列,而不像哈希表那样毫无规律。
上面向TreeSet中添加的对象好像没有实现Comparable接口哦??那是因为添加的是String对象,而String类已经实现了Comparable接口。
当然,你也可以在创建TreeSet对象时传递一个比较器来实现你自己的排序方式:
import java.util.*;
public class TreeSetTest
{
public static void main(String[] args)
{
//传递一个比较器来实现你自己的排序方式
TreeSet tr =new TreeSet(new Student.StudentComparator());
tr.add(new Student(3,"wnagwu"));
tr.add(new Student(2,"zhangshan"));
tr.add(new Student(2,"lisi"));
tr.add(new Student(1,"xiejin"));
Iterator it =tr.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class Student implements Comparable,Comparator
{
int num;
String name;
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public int compareTo(Object o)
{
Student st =(Student)o;
int result;
result= num>st.num?1:(num==st.num?0:-1);
//如果学号相等,就按姓名排列
/*if(result==0)
{
return name.compareTo(st.name);
}*/
return result;
}
//实现Comparator接口并实现它的抽象方法
public int compare(Object o1,Object o2)
{
Student st1 =(Student)o1;
Student st2 =(Student)o2;
return st1.name.compareTo(st2.name);
}
//重写toString()方法,因为如果不重写,打印出来的是16进制代码
public String toString()
{
return "num="+num+"; name="+name;
}
public static class StudentComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
Student st1 =(Student)o1;
Student st2 =(Student)o2;
int result;
result=st1.num>st2.num?1:(st1.num==st2.num?0:-1);
if(result==0)//如果学号相等 就进行名字排序
{
result=st1.name.compareTo(st2.name);
}
return result;
}
}
}
上面如果只使用学号排序,那么学号相同的就不会被打印的。
问题 :如果不用内部类实现比较器,该怎么做???
HashSet与TreeSet的区别:
HashSet是基于hash算法实现的,性能优于TreeSet。通常使用HashSet,在我们需要对其中元素排序的时候才使用TreeSet。
来源:http://blog.csdn.net/wzwjr/archive/2008/12/27/3618195.aspx
分享到:
相关推荐
在这个“javaTreeSet实现图书管理系统”中,我们可以利用`TreeSet`的特性来构建高效且功能完备的图书馆管理软件。下面将详细介绍如何利用`TreeSet`实现上述描述的功能。 1. **描述一个图书馆** 图书馆的基本信息...
在Java编程中,集合框架是处理数据的重要工具,而`TreeSet`作为其中之一,它是一个有序、不包含重复元素的集合。本知识点主要探讨如何利用Java的`TreeSet`类来实现两个集合的并集算法。 `TreeSet`是基于红黑树(Red...
Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类Java SE程序 TreeSet类中自定义CompareTo类...
Java TreeSet类的简单理解和使用 Java TreeSet类是Set接口的一个实现类,主要作用是用于对对象的排序以及确定存入对象的唯一性。TreeSet类可以自动地对存入的对象进行排序,并且保证存入的对象的唯一性。 在使用...
TreeSet 是 Java 中的一个集合类,它实现了 SortedSet 接口,并且使用红黑树作为底层数据结构。TreeSet 具有以下主要特点: 排序性:TreeSet 中的元素是有序的,默认按照元素的自然顺序进行排序。或者,可以在创建 ...
《Java8数据结构——TreeSet详解》 在Java集合框架中,TreeSet是一个重要的数据结构,它是Set接口的实现类之一,与HashSet和LinkedHashSet不同,TreeSet具有排序功能,这是因为其不仅继承自AbstractSet,还实现了...
使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...
4. **迭代器**:`TreeSet`遵循Java集合框架的迭代规则,我们可以使用`iterator()`获取一个迭代器,然后通过`hasNext()`和`next()`来遍历并访问集合中的元素。 5. **遍历`TreeSet`**:由于`TreeSet`是有序的,我们...
* 摊位销售管理 1.有一个水果销售摊位,销售3种水果,重量和单价各不相同,实现多次的销售业务 2.销售时如果为顾客为女性销售金额打8折 3.显示当前各种水果的库存数 4.查询全部销售记录信息 5.加入其它水果品种 ...
TreeSet 红黑树结构算法是 Java 中的一种数据结构,它是基于红黑树数据结构的实现。红黑树是一种自平衡的排序二叉树,它可以保证快速检索指定节点。TreeSet 和 TreeMap 之间存在着紧密的关系,下面我们将详细讲解 ...
停车场管理 1.一个停车场,内有多个车位,可停入各种车辆 2.只有具备车牌并高度低于3米的车辆可停入 3.停入时开始计费,按每小时2元 4.查询全部停车位的状态 5.按车牌及停车位号取车,取车时收停车费 ...
Java TreeSet实现学生按年龄大小和姓名排序的方法示例 在 Java 中,TreeSet 是一...本文展示了如何使用 Java 的 TreeSet 和 Comparable 接口来实现学生按年龄大小和姓名排序的方法,这对 Java 开发人员来说非常有用。
从TreeSet的源代码可以看到,TreeSet使用了一个NavigableMap来保存Set集合的元素,其中NavigableMap是TreeMap的一个子接口。TreeSet的构造器可以指定一个NavigableMap对象来创建Set集合,也可以使用默认的TreeMap来...
2. **TreeSet**:它是Java集合框架中`Set`接口的一个实现,基于红黑树数据结构。`TreeSet`保证了元素的排序性,无论是自然排序还是自定义比较器排序。它不允许有重复元素,并且提供了一种高效的查找、添加和删除元素...
·课程共30天,715个知识视频小节,涉及主流Java使用的方方面面,全而不冗余 ·全程内容涵盖数据结构、设计模式、JVM内存结构等深度技术 ·企业级笔试面试题目深入源码级讲解,拒绝死记硬背 4.代码量更大、案例更...
1. 存储结构:HashSet使用哈希表,TreeSet使用红黑树。 2. 顺序:HashSet无特定顺序,TreeSet保持排序。 3. 插入、删除和查找效率:HashSet平均O(1),最坏O(n);TreeSet平均O(logn)。 4. 允许的元素:两者都不允许...
Class003_TreeSet.java
Java 中 TreeSet 的两种排序方式 TreeSet 是 Java 中一种基于树形结构的 Set 实现,它具有自动排序的功能。在使用 TreeSet 时,我们可以通过实现 Comparable 接口或提供Comparator 对象来指定排序规则。下面,我们...
`TreeSet`是Java集合框架中的一个类,它继承自`AbstractSet`并实现了`NavigableSet`接口。`TreeSet`的主要特点就是它会自动按照一定的顺序对存储的元素进行排序。在这个场景下,我们使用`TreeSet`来实现学生成绩的...
本资源聚焦于Java集合中的四个关键类:HashSet、TreeSet、HashMap和TreeMap,它们分别代表了不同类型的集合容器。 1. **HashSet**:HashSet是一个不允许重复元素的无序集合。它基于哈希表实现,插入和查找操作的...