TreeSet:

1.向TreeSet添加元素时

如果元素具有自然特性,那么就按照元素的自然顺序的特点进行排序储存。

如果不具备,就要实现Compareable接口中的compareTo() 方法。

可以直接实现Compareable接口,但最好自己定义比较器类。

2.TreeSet的底层实现是红黑树,也叫二叉树,集合中的元素一个个进行比较时

当把拿出来的第一个元素当成树根,依次拿其它元素进行比较如果大于树根

就放在其右支,小于则放在其左支,如此迭代,直到所有元素被比较完,安放完。

注意:在二叉树中出现3个元素,还未形成二叉结构时,就要重新排列,就是把

根和支的位置改变了。

(1, 2,3,4)   (a,  b,  c, d )自然顺序

import java.util.*;
import java.util.ListIterator;
public class ex12 {
public static void main(String[] args) { TreeSet set = new TreeSet();
set.add(new Emp(100, "Tom", 100));
set.add(new Emp(101, "Tom", 400));
set.add(new Emp(109, "Tom", 100));//Ctrl + d
set.add(new Emp(109, "Tom", 99));//Ctrl + d
set.add(new Emp(209, "Tom", 130));//Ctrl + d
System.out.println(set); }
} class Emp implements Comparable{
int id;
String name;
int money; public Emp(int id, String name, int money) {
this.id = id;
this.name = name;
this.money = money;
} @Override
public String toString() {
return "{ id = " + this.id + " ,name = " + this.name + " ,money = " + money + " }";
} @Override//Ctrl + O
public int compareTo(Object o) {
Emp e = (Emp)o;
return this.money - e.money ;
}
}
[{ id = 109 ,name = Tom ,money = 99 }, { id = 100 ,name = Tom ,money = 100 }, { id = 209 ,name = Tom ,money = 130 }, { id = 101 ,name = Tom ,money = 400 }]

Process finished with exit code 0
import java.util.*;
import java.util.ListIterator;
public class ex12 {
public static void main(String[] args) { MyCompare my = new MyCompare();
TreeSet set = new TreeSet(my);//创建构造器时传入构造器***********
set.add(new Emp(100, "Tom", 100));
set.add(new Emp(101, "Tom", 400));
set.add(new Emp(109, "Tom", 100));//Ctrl + d
set.add(new Emp(109, "Tom", 99));
set.add(new Emp(209, "Tom", 130));
System.out.println(set); }
} class Emp {
int id;
String name;
int money; public Emp(int id, String name, int money) {
this.id = id;
this.name = name;
this.money = money;
} @Override
public String toString() {
return "{ id = " + this.id + " ,name = " + this.name + " ,money = " + money + " }";
}
} //自定义构造器
class MyCompare implements Comparator<Emp> {
@Override
public int compare(Emp o1, Emp o2) {
return o1.id - o2.id;
}
}
//按id排序
[{ id = 100 ,name = Tom ,money = 100 }, { id = 101 ,name = Tom ,money = 400 }, { id = 109 ,name = Tom ,money = 100 }, { id = 209 ,name = Tom ,money = 130 }]

Process finished with exit code 0

java 集合(Set2)的更多相关文章

  1. JAVA 集合List,数组,Set,Map,直接的相互转换

    Java集合转换[List<-->数组.List<-->Set.数组<-->Set.Map-->Set.Map-->List] //List--> ...

  2. java集合框架1

    1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成O ...

  3. java集合简介

    java集合主要包括以下几点 Java 集合概述 Collection 接口 Iterator 接口 Set List Map Collections 工具类 Enumeration 1.java集合 ...

  4. java集合分析(转载)

    参考文章:浅谈Java中的Set.List.Map的区别 Java 7 Collections详解 java中集合分为三类: Set(集) List(列表) Map(映射) Set和List继承自Co ...

  5. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  6. Java集合排序及java集合类详解--(Collection, List, Set, Map)

    1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...

  7. 死磕 java集合之CopyOnWriteArraySet源码分析——内含巧妙设计

    问题 (1)CopyOnWriteArraySet是用Map实现的吗? (2)CopyOnWriteArraySet是有序的吗? (3)CopyOnWriteArraySet是并发安全的吗? (4)C ...

  8. 032.[转] Java集合框架

    Java集合框架和各实现类性能测试 pphh发布于2017年11月17日 Java语言集合框架提供一系列集合接口类 (collection interface)和实现类,满足对集合中元素对象的各种集合 ...

  9. java集合的简单用法

    typora-root-url: iamge [TOC] 1.集合接口 1.1将集合的接口与实现分离 ​ 与现代的数据结构类库的常见情况一样,Java集合类库也将接口(interface)与实现(im ...

  10. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

随机推荐

  1. WinFormd多窗体 菜单和工具栏:

    一.多窗体 1.哪个是主窗体 主窗体就是如果关掉这个窗体,程序就会退出的那个窗体1问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了 办法:构造函数传值,将窗体传到另一个窗 ...

  2. 解决Bootstrap 附加导航(Affix)的问题和使用时若干注意事项

    1.要清楚Affix分别赋予的class, 开始:affix-top 达到top参数:affix 达到bottom参数:affix-bottom 2.一定要自定义这些class,否则 插件会默认给你在 ...

  3. C/C++通过WMI和系统API函数获取获取系统硬件配置信息

    转载:http://www.cnblogs.com/renyuan/archive/2012/12/29/2838716.html 转载:http://blog.csdn.net/jhqin/arti ...

  4. 一、spring——helloWorld

    1.添加jar包,如下图所示: 2.建立spring项目,如下图所示: 3.验证,如下图所示:

  5. UIEdgeInsetsMake, CGRectOffset等API参数详解

    1, UIEdgeInsetsMake ( CGFloat top, CGFloat left, CGFloat bottom, CGFloat right ) 2,position点是相对suerL ...

  6. 在HTML5规范中div中读取预存的data-[key]值

    HTML 代码: <div id="div_test" data-test="this is test" ></div> jQuery ...

  7. CodeForces 496B Secret Combination

    Secret Combination Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...

  8. 【转载】COM 连接点

    原文:COM 连接点 CLR 完全介绍 COM 连接点 Thottam R. Sriram 来自:http://msdn.microsoft.com/zh-cn/magazine/cc163361.a ...

  9. Queue 应用——拓扑排序

    1. 拓扑排序 题目描述:对一个有向无环图(Directed Acyclic Graph, DAG)G进行拓扑排序,是将G中所有顶点排成线性序列,是的图中任意一堆顶点u和v,若边(u, v)在E(G) ...

  10. File Checksum Integrity Verifier

    Microsoft (R) File Checksum Integrity Verifier V2.05 README file =================================== ...