本帖最后由 张洪慊 于 2013-4-24 13:11 编辑
我在写这个程序时候也遇到了,我当时也在想
因此我去翻看了源码:
我的是JDK 1.7- /*
- 以下摘了部分源码:
- 你要知道TreeSet底层用的是TreeMap,TreeSet集合中的对象是作为TreeMap的Key.
- */
- final int compare(Object k1, Object k2) {
- return comparator==null ? ((Comparable<? super K>)k1).compareTo((K)k2)
- : comparator.compare((K)k1, (K)k2);
- }
- public V put(K key, V value) {
- Entry<K,V> t = root;
- if (t == null) {
- compare(key, key); // type (and possibly null) check
- /*
- compare(key,key):这个就是说明问题的关键
- 它首先把第一个元素自身和自身比了下
- 源代码注释说:类型检测(可能为null)
- 个人理解:它是为了判断第一个元素是否具有可比性(自然顺序/指定比较器)
- 如果不具备,那么不好意思,下面的元素我也没必要比了.
- */
- root = new Entry<>(key, value, null);
- size = 1;
- modCount++;//验证是否发生并发修改异常
- return null;
- }
复制代码 /*
至于毕老师的运行结果
可能是JDK版本不同,
底层源代码实现略有差别.
*/ |