》TreeSet集合使用实例

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

• ## TreeSet集合使用实例

package cn.itcast_05;

import java.util.TreeSet;

/*
* TreeSet：能够对元素按照某种规则进行排序。
* 排序有两种方式
* A:自然排序
* B:比较器排序
*
* TreeSet集合的特点：排序和唯一
*
*/
public class TreeSetDemo {
public static void main(String[] args) {
// 创建集合对象
// 自然顺序进行排序
TreeSet<Integer> ts = new TreeSet<Integer>();

// 创建元素并添加
// 20,18,23,22,17,24,19,18,24

// 遍历
for (Integer i : ts) {
System.out.println(i);
}
}
}

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

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>());
}

return m.put(e, PRESENT)==null;
}
}

|
3天前
|

netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
17 3
|
1天前
|

**摘要：** 这篇文章介绍了聚类分析的基本概念和几种主要的聚类算法。聚类是无监督学习中用于发现数据内在结构的技术，常用于市场分析、图像分割等场景。K-均值是一种基于划分的算法，简单高效但易受初始值影响；层次聚类包括凝聚和分裂方式，形成层次结构但计算复杂；DBSCAN基于密度，能处理任意形状的簇，但参数选择敏感。文章还讨论了这些算法的优缺点和适用场景，并提供了相关资源链接和Python实现。
21 9
|
2天前
|

HTTP请求流程概览：浏览器构建请求行含方法、URL和版本；检查缓存；解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览：浏览器构建请求行含方法、URL和版本；检查缓存；解析IP与端口；TCP连接（HTTP/1.1可能需排队）；三次握手；发送请求头与体；服务器处理并返回响应；TCP连接可能关闭或保持；浏览器接收并显示响应，更新缓存。HTTP版本间有差异。
12 5
|
4天前
|

14 1
|
3天前
|
XML Java 数据格式
Spring容器启动源码解析
Spring容器启动源码解析
|
5天前
|
XML Java 数据格式

16 3
|
5天前
|
XML Java 数据格式

13 1
|
15天前
|
SQL 缓存 算法
【源码解析】Pandas PandasObject类详解的学习与实践
【源码解析】Pandas PandasObject类详解的学习与实践
32 12
|
15天前
|

【源码解析】深入解析 pandas的Block 类中算术运算和重排实现
【源码解析】深入解析 pandas的Block 类中算术运算和重排实现
19 6
|
15天前
|

【源码解析】深入Pandas的心脏DataFrame 含十大功能、源码实现与编程知识点
【源码解析】深入Pandas的心脏DataFrame 含十大功能、源码实现与编程知识点
23 3