- 浏览: 746614 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
知道TreeSet的backing map是TreeMap,看程序:
import java.util.TreeSet; class R implements Comparable<Object> { int count; public R(int count) { this.count = count; } public String toString() { return "R(count:" + count + ")"; } public boolean equals(Object o) { if (o instanceof R) { R r = (R) o; if (this.count == r.count) return true; } return false; } public int compareTo(Object o) { R r = (R) o; if (this.count > r.count) return 1; else if (this.count == r.count) return 0; else return -1; } } public class TestTreeSetError { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TreeSet<R> ts = new TreeSet<R>(); ts.add(new R(5)); ts.add(new R(-3)); ts.add(new R(9)); ts.add(new R(-2)); System.out.println("1 = " + ts); R first = (R) ts.first(); first.count = 20; System.out.println("2 = " + ts); R last = (R) ts.last(); last.count = -2; System.out.println("3 = " + ts); System.out.println(ts.remove(new R(-2))); System.out.println(ts); System.out.println(ts.remove(new R(5))); System.out.println(ts); System.out.println(ts.remove(new R(-2))); System.out.println(ts); } }
树添加修改稳定之后,形成的红黑树是这样的:
5
20 -2
-2
第二层-2是20的右子节点,因为删除时循根搜索,-2一直往左路搜,最后搜到20左子节点为空,所以删除失败,待5删除之后,重新平衡了树结构:
-2
20 -2
因此-2就能被删除
这其中涉及到了TreeSet中的remove:
public boolean remove(Object o) { return m.remove(o)==PRESENT; }
TreeMap中的remove:
public V remove(Object key) { Entry<K,V> p = getEntry(key); if (p == null) return null; V oldValue = p.value; deleteEntry(p); return oldValue; }
最终到TreeMap的getEntry:
final Entry<K,V> getEntry(Object key) { // Offload comparator-based version for sake of performance if (comparator != null) return getEntryUsingComparator(key); if (key == null) throw new NullPointerException(); Comparable<? super K> k = (Comparable<? super K>) key; Entry<K,V> p = root; while (p != null) { int cmp = k.compareTo(p.key); if (cmp < 0) p = p.left; else if (cmp > 0) p = p.right; else return p; } return null; }
添加时涉及到代码略
发表评论
-
关于方法访问控制符protected
2012-11-29 10:38 1261http://bbs.csdn.net/topics/3902 ... -
一个基本问题关于引用的
2012-05-15 10:20 1126问: int a = 1; Integer b = new ... -
我對面向對象和過程的理解。
2012-05-02 08:30 1065我的一些理解。 面向过程,是对客观现象的描述,感觉是有一个上 ... -
stack and heap
2012-01-13 23:17 1050我觉得是根据应用方式 和本身特性 才将内存分区的,目的是提 ... -
program experience conclusion
2011-07-11 15:35 10621. check parameters for validit ... -
PreparedStatement's possible designated parameter
2011-04-29 13:45 985though it's nearly impossible t ... -
clean Log4j
2011-04-12 11:19 1064import org.apache.log4j.BasicCo ... -
about abstract class
2011-04-02 10:34 866yes, we do know abstract class ... -
cvs operations on linux
2011-03-25 09:40 1009http://www.linuxhowtos.org/Syst ... -
regex to exchange two parts
2011-03-24 17:09 1087public class Test { public ... -
About the database locking
2011-03-09 11:02 962http://en.wikipedia.org/wiki/Lo ... -
how to send soap message in java
2011-03-08 10:29 1894import java.io.BufferedReader; ... -
About ShutDownDemo
2011-03-07 15:02 980public class ShutdownDemo { p ... -
How do you know if an explicit object casting is needed
2011-02-24 16:33 1186通俗来讲,不可能将一只是猫的动物强转为狗 再说Graphic ... -
有关MimeUtility
2011-02-24 13:11 3360import java.io.UnsupportedEncod ... -
C#连接sql server 2008的一件2事
2011-02-24 09:01 2151once upon a time, i came upon o ... -
Shadowing, Overriding, Hiding and Obscuring
2011-02-22 15:15 1163当子类属性与父类属性重叠时 这种叫法上是shadowi ... -
JAXP usage
2011-02-16 16:07 1096import java.io.ByteArrayInputSt ... -
运行一个类,如果classpath中路径带空格就加双引号
2011-02-11 11:25 2805注意是这样加: java -cp .;"d:\my ... -
关于ClassPath中的current directory
2011-01-28 16:40 1152Given: 1. package com.company. ...
相关推荐
例如,TreeSet 的 addAll 方法就是调用 TreeMap 的 putAll 方法来添加元素。TreeSet 的其他方法,如 contains、remove、size 等,也都是调用 TreeMap 的对应方法来实现。 红黑树数据结构是 TreeSet 的核心,它是一...
当向`TreeSet`添加元素时,如果两个元素的`compareTo()`返回值为0,那么`TreeSet`会认为这两个元素是相等的,因此不会添加重复元素。 在给定的代码示例中,创建了一个自定义类`Combine`,实现了`Comparable...
3. **基本操作**:`add()`用于向`TreeSet`中添加元素,`remove()`用于删除指定元素,`contains()`用于检查集合是否包含某个元素。`clear()`则可以清空整个集合。 4. **迭代器**:`TreeSet`遵循Java集合框架的迭代...
如果将重复元素添加到 TreeSet 中,后面的重复元素将被忽略。 支持范围操作:TreeSet 提供了一些方法用于执行范围操作,例如 subSet()、headSet()、tailSet() 等,可以根据元素的顺序提取子集。 效率较高:基于...
2. **填充数据**:向这两个`TreeSet`中添加元素,这可以根据具体需求动态添加或从其他数据源读取。 ```java set1.add(1); set1.add(3); set1.add(5); set2.add(2); set2.add(3); set2.add(7); ``` 3. **...
当需要进行洗牌操作时,可以先将`TreeSet`的元素复制到`ArrayList`,然后对`ArrayList`进行随机排序,最后再将`ArrayList`中的元素重新添加回`TreeSet`。 总之,在选择数据结构实现扑克牌游戏时,应充分考虑数据的...
HashMap 源码实现红黑树添加元素和删除元素 HashMap 中使用红黑树来存储元素,是为了提高查找、插入和删除操作的性能。红黑树是一种自平衡二叉树,可以保持二叉树的平衡,从而获得较高的查找性能。 红黑树的创建...
对于`TreeSet`,虽然尝试添加了多个相同的`Student`对象,但由于`TreeSet`不允许重复元素,最终集合中只会保留一个元素。对于`HashMap`,尽管`Student`类的`equals()`和`hashCode()`方法未正确实现,但是由于`...
6. **效率和性能**:由于红黑树的特性,subSet()操作通常非常高效,但添加或删除元素可能会影响子集的性能,因为需要维护红黑树的平衡。 7. **并发考虑**:如果在多线程环境中使用TreeSet,需要使用...
接下来,我们可以创建一个`TreeSet<Student>`实例,添加学生对象,然后遍历`TreeSet`来获取排序后的学生成绩: ```java TreeSet<Student> set = new TreeSet(); set.add(new Student("张三", 90)); set.add(new ...
在添加元素时,如果两个对象的 `hashCode()` 返回相同的值,那么它们会被放在同一个桶(bucket)中,此时 `equals()` 方法会用来区分这两个元素是否真的相同,以避免添加重复元素。由于 HashSet 的迭代顺序不是固定...
在不考虑去重和排序的情况下,ArrayList、LinkedList 和 HashMap 的添加元素效率最高,HashSet 的添加元素效率相对较低,而 TreeSet 的添加元素效率是最低的。在实际开发中,需要根据具体情况选择合适的集合类型,以...
在实际应用中,TreeSet常用于需要保持元素有序的场景,如保存一组排序后的数据,或者在数据库操作中生成有序的主键等。同时,NavigableSet接口的导航功能使得在大量数据中高效地定位元素或子集成为可能,大大增强了...
当向TreeSet中添加元素时,它会调用这些元素的`compareTo(Object obj)`方法进行比较。这个方法源自`Comparable`接口,任何希望在TreeSet中进行排序的类都应当实现这个接口。在`compareTo()`方法中,需要定义比较规则...
当我们向`HashSet`中添加元素时,哈希函数会计算元素的哈希值,根据这个值来决定元素在内部存储结构中的位置。然而,如果两个元素的哈希值冲突,`HashSet`会使用链地址法来处理这些冲突。 接着,我们转向`TreeSet`...
TreeSet的 addAll 方法可以将Collection集合中的所有元素添加到Set集合中,並檢查Collection集合中的元素是否符合TreeSet的顺序规则。 TreeMap 和 TreeSet 之间的关系是,TreeSet 使用 TreeMap 来保存Set集合的元素...
在Java编程中,处理整型数组并删除其中的重复元素是一项常见的任务。这通常涉及到集合类的使用,比如HashSet或ArrayList,以及基本的数组操作。本文将深入探讨如何实现这个功能,同时提供一种可能的解决方案。 首先...
HashSet是一个不允许有重复元素的集合,当我们尝试将一个数组中的所有元素添加到HashSet时,它会自动过滤掉重复元素。例如: ```java Integer[] array = {1, 2, 3, 2, 4, 3, 5}; Set<Integer> set = new HashSet...
当添加元素到 `TreeSet` 中时,它们会根据比较器的规则进行排序。 以下是对 `TreeMap` 和 `TreeSet` 的主要特性的总结: 1. **自动排序**:两者都支持自动排序,无需额外的排序操作。 2. **数据结构**:都基于红黑...
ArrayList更善于查找元素,而LinkedList更善于添加和删除元素。 Set接口是Java集合类中另一个基本的接口,提供了基本的添加、删除、检查元素是否存在的方法。HashSet和TreeSet是Set接口的两个常用的实现类。HashSet...