》TreeSet集合使用实例

》TreeSet集合的红黑树 存储与取出(图)

》TreeSet的add()方法源码

 

 

  • TreeSet集合使用实例

package cn.itcast_05;

import java.util.TreeSet;

/*
* TreeSet:能够对元素按照某种规则进行排序。
* 排序有两种方式
* A:自然排序
* B:比较器排序
*
* TreeSet集合的特点:排序和唯一
*
* 通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。
*/
public class TreeSetDemo {
public static void main(String[] args) {
// 创建集合对象
// 自然顺序进行排序
TreeSet<Integer> ts = new TreeSet<Integer>(); // 创建元素并添加
// 20,18,23,22,17,24,19,18,24
ts.add(20);
ts.add(18);
ts.add(23);
ts.add(22);
ts.add(17);
ts.add(24);
ts.add(19);
ts.add(18);
ts.add(24); // 遍历
for (Integer i : ts) {
System.out.println(i);
}
}
}

 

 

  • TreeSet集合的红黑树 存储与取出(图)

 

 

  • TreeSet的add()方法源码

interface Collection{...}

 

interface Set extends Collection{...}

 

interface NavigableMap{...}

 

class TreeMap implements NavigableMap{
private final Comparator<? super K> comparator; public V put(K key, V value) {
Entry<K,V> t = root;//根元素
if (t == null) {//起初,建立根元素
// TBD:
// 5045147: (coll) Adding null to an empty TreeSet should
// throw NullPointerException
//
// compare(key, key); // type check
root = new Entry<K,V>(key, value, null);
size = 1;
modCount++;
return null;
}
int cmp;
Entry<K,V> parent;
// split comparator and comparable paths
Comparator<? super K> cpr = comparator;//通过比较器创建的TreeMap?
if (cpr != null) {
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
else {
if (key == null)
throw new NullPointerException();
Comparable<? super K> k = (Comparable<? super K>) key;//自然排序,Integer implements Comparable接口,并重写了compareTo()方法
do {
parent = t;
cmp = k.compareTo(t.key);
//小于为左叶子,大于为有叶子,等于时舍弃
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
Entry<K,V> e = new Entry<K,V>(key, value, parent);
if (cmp < 0)
parent.left = e;
else
parent.right = e;
fixAfterInsertion(e);
size++;
modCount++;
return null;
} }

 

class TreeSet implements Set{

    private transient NavigableMap<E,Object> m;

    TreeSet(NavigableMap<E,Object> m) {
this.m = m;
} public TreeSet() {
this(new TreeMap<E,Object>());
} public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
}

最新文章

  1. [Unity3D]引擎学习之注意事项(持续更新中)
  2. Atitit 为什么网络会有延时 电路交换与分组交换的区别
  3. emacs 新手笔记(三) —— 为 emacs 做一点简单的定制
  4. yaml官方介绍
  5. 在Android上用AChartEngine轻松绘制图表
  6. C语言操作mysql
  7. paip 自定义输入法多多输入法词库的备份导出以及导入
  8. 替罪羊树—BZOJ3224: Tyvj 1728 普通平衡树
  9. Node.js的简介和安装
  10. wpf mvvm使用问题集锦
  11. JAVA混型和潜在类型机制
  12. select * from (select P.*,ROWNUM RN FROM(select * from Mp_Relatedart where pubbaseid=785 order by ID ASC )P)M WHERE M.RN&gt;2 and M.RN &lt;= 7
  13. hibernate的优化
  14. Maven第四篇【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
  15. 类似fabric主机管理demo
  16. [HNOI 2008]越狱
  17. javaWeb之使用servlet搭建服务器入门
  18. .net core 发送邮件
  19. Oracle创建及调用存储过程
  20. LiveCharts文档-4基本绘图-2基本柱形图

热门文章

  1. redis实战笔记(4)-第4章 数据安全与性能保障
  2. 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合
  3. Android之网络丢包事件
  4. Golang panic用法
  5. ant编译apache-nutch-2.2.1结合mysql实现爬虫的安装配置全过程
  6. autofac使用Common Serivce Locator跟随wcf,mvc,web api的实例控制
  7. MyEclipse关闭当前正在编辑的页面
  8. Java基础教程(20)--数字和字符串
  9. centos7安装 ftp 组件与开放防火墙端口命令
  10. 解决:maven 项目添加 pom 的 oracle 依赖