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. 看懂UML类图和时序图

    看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...

  2. XML学习笔记(二)-- DTD格式规范

    标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...

  3. CUBRID学习笔记 18 sql语句的预处理(类似存储过程)

    定义预处理  类似sqlserver的存储过程 语法 PREPARE stmt_name FROM preparable_stmt 说明 PREPARE 关键字 stmt_name 预处理语句的名字 ...

  4. log4j的使用(1) —— 简单入门篇

    这里会介绍三种打印日志的方法:控制台Console,文件File,数据库DataBase 1.下载lo4j的jar包并导入project 2.因为要在数据库添加日志,所以先新建一个库,并新建打印日志的 ...

  5. NPN&PNP

    一.晶体管基础知识 晶体管分2种:NPN.PNP 晶体管通常封装为TO-92,下面是元件实物图 和 元件符合: NPN: 当电压和电流被加到基极上时,NPN晶体管: 其工作原理: 就像水龙头—给控制开 ...

  6. 装了maven插件的eclipse中M2_REPO无法编辑、删除(转)

    今天用了新版本的eclipse,用maven在命令行生成了一个普通项目.导入eclipse之后发现本地仓库的路径不正确. 显示的为 user.path/.m2/repository 但是我的仓库早已经 ...

  7. iOS - OC RunTime 运行时

    1.运行时的使用 向分类中添加属性 // 包含运行时头文件 #import <objc/runtime.h> /* void objc_setAssociatedObject(id obj ...

  8. Redis基础知识之————php-Redis 常用命令专题

    Keys del,delete - 删除键 dump - 返回存储在指定键值的序列化版本. exists - 确定键是否存在 expire,setTimeout,pexpire - 设置键的生存时间( ...

  9. MyEclipse manage Deployment 管理器失效

    如果你使用的是10.7版本,可参考本文 出错: 1.Deployments 部署按钮失效; 2.MyEclipse 启动后初始化WorkSpaces抛出Deployment的空指针异常(java.la ...

  10. POJ2676,HDU4069解决数独的两种实现:DFS、DLX

    搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...