java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

简介: /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返回值有:负数,零,正数。

/*TreeSet
* treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序
* 所以输出的数据是经过排序的数据
* 注:compareTo方法返回值有:负数,零,正数。分别表示小于,等于,大于
* 对于存入自定义的对象元素,要重写元素的compareTo(Object obj)方法
* 元素定义时,需要实现Comparable接口
* */

 

 1 import java.util.Iterator;
 2 import java.util.TreeSet;
 3 public class StudentCode {
 4     
 5     public static void main(String []args){
 6         //定义TreeSet对象,并赋值java存在的对象
 7         TreeSet ts1=new TreeSet();
 8         ts1.add("java10");
 9         ts1.add("java01");
10         ts1.add("java08");
11         ts1.add("java04");
12         //输出对象的值,是经过排序的数据
13         System.out.println(ts1);
14         //定义TreeSet对象,并赋值自定义的对象
15         TreeSet ts2=new TreeSet();
16         ts2.add(new Person("ls",11));
17         ts2.add(new Person("zs",22));
18         ts2.add(new Person("ls",13));
19         ts2.add(new Person("ls",11));
20         //输出对象,也是经过排序的数据
21         for(Iterator it=ts2.iterator();it.hasNext();){
22             Person p=(Person)it.next();
23             System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
24         }
25     }
26 }
27 //自定义数据,需要实现Comparable接口
28 class Person implements Comparable{
29     private String name;
30     private int age;
31     Person(String name,int age){
32         this.name=name;
33         this.age=age;
34     }
35     public String getName(){
36         return this.name;
37     }
38     public int getAge(){
39         return this.age;
40     }
41     //重写compareTo()方法,
42     public int compareTo(Object obj){
43         if(!(obj instanceof Person))
44             throw new RuntimeException("不是Person对象");
45         Person p =(Person)obj;
46         if(this.age>p.getAge()){
47             return 1;
48         }
49         else if(this.age<p.getAge()){
50             return -1;
51         }else{
52             return this.name.compareTo(p.getName());
53         }
54     }
55 }

 

 1 /*TreeSet
 2  *     treeSet当元素不具备比较性,或者比较性不是所需要的时候,
 3  *         可以使treeSet集合具有比较性。
 4  *         定义比较器,并将比较器作为参数传给TreeSet集合
 5  *         比较器需要实现Comparator接口
 6  *     当元素具备比较性和比较器同时出现时,以比较器为准。
 7  * */
 8 import java.util.Comparator;
 9 import java.util.Iterator;
10 import java.util.TreeSet;
11 public class StudentCode {
12     
13     public static void main(String []args){
14         //定义TreeSet对象,并传入比较器
15         TreeSet ts2=new TreeSet(new MyCompareble());
16         ts2.add(new Person("ls",11));
17         ts2.add(new Person("zs",22));
18         ts2.add(new Person("ls",13));
19         ts2.add(new Person("ls",11));
20         //输出对象
21         for(Iterator it=ts2.iterator();it.hasNext();){
22             Person p=(Person)it.next();
23             System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
24         }
25     }
26 }
27 //定义比较器 — — — — 以姓名为第一顺序,年龄为第二顺序
28 class MyCompareble implements Comparator{
29     //实现比较器里面的compare方法
30     public int compare(Object o1,Object o2){
31         Person p1=(Person)o1;
32         Person p2=(Person)o2;
33         int num=p1.getName().compareTo(p2.getName());
34         if(num==0){
35             return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
36         }
37         return num;
38     }
39 }
40 
41 //自定义数据,需要实现Comparable接口 — — — — 以年龄为第一顺序,姓名为第二顺序
42 class Person implements Comparable{
43     private String name;
44     private int age;
45     Person(String name,int age){
46         this.name=name;
47         this.age=age;
48     }
49     public String getName(){
50         return this.name;
51     }
52     public int getAge(){
53         return this.age;
54     }
55     //重写compareTo()方法,
56     public int compareTo(Object obj){
57         if(!(obj instanceof Person))
58             throw new RuntimeException("不是Person对象");
59         Person p =(Person)obj;
60         if(this.age>p.getAge()){
61             return 1;
62         }
63         else if(this.age<p.getAge()){
64             return -1;
65         }else{
66             return this.name.compareTo(p.getName());
67         }
68     }
69 }

 

相关文章
|
22天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
39 3
|
2天前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
11 1
|
7天前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
34 7
|
20天前
|
存储 Java BI
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
68 17
|
1月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
49 5
|
8月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
5月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
5月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
3月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
77 5