java 17 - 6 TreeSet集合及其add()方法的源码解析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java 17 - 6 TreeSet集合及其add()方法的源码解析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2221字,纯文字阅读大概需要4分钟。
内容图文
![java 17 - 6 TreeSet集合及其add()方法的源码解析](/upload/InfoBanner/zyjiaocheng/1054/61d56b8b6fbe41379029700e63c29d1b.jpg)
TreeSet:能够对元素按照某种规则进行排序。
排序有两种方式
A:自然排序
B:比较器排序
TreeSet集合的特点:排序和唯一
1 public class TreeSetDemo { 2 public static void main(String[] args) { 3 // 创建集合对象 4 // 自然顺序进行排序 5 TreeSet<Integer> ts = new TreeSet<Integer>(); 6 7// 创建元素并添加 8// 20,18,23,22,17,24,19,18,24 9 ts.add(20); 10 ts.add(18); 11 ts.add(23); 12 ts.add(22); 13 ts.add(17); 14 ts.add(24); 15 ts.add(19); 16 ts.add(18); 17 ts.add(24); 1819// 遍历20for (Integer i : ts) { 21System.out.println(i); 22} 23} 24 }
通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法。
TressSet集合的add()方法的源码:
1 interface Collection {...} 2 3 interface Set extends Collection {...} 4 5interface NavigableMap { 6 7} 8 9class TreeMap implements NavigableMap { 10public V put(K key, V value) { 11 Entry<K,V> t = root; 12if (t == null) { 13 compare(key, key); // type (and possibly null) check1415 root = new Entry<>(key, value, null); 16 size = 1; 17 modCount++; 18returnnull; 19} 20int cmp; 21 Entry<K,V> parent; 22// split comparator and comparable paths23 Comparator<? super K> cpr = comparator; 24if (cpr != null) { 25do { 26 parent = t; 27 cmp = cpr.compare(key, t.key); 28if (cmp < 0) 29 t = t.left; 30elseif (cmp > 0) 31 t = t.right; 32else33return t.setValue(value); 34 } while (t != null); 35} 36else { 37if (key == null) 38thrownew NullPointerException(); 39 Comparable<? super K> k = (Comparable<? super K>) key; 40do { 41 parent = t; 42 cmp = k.compareTo(t.key); 43if (cmp < 0) 44 t = t.left; 45elseif (cmp > 0) 46 t = t.right; 47else48return t.setValue(value); 49 } while (t != null); 50} 51 Entry<K,V> e = new Entry<>(key, value, parent); 52if (cmp < 0) 53 parent.left = e; 54else55 parent.right = e; 56fixAfterInsertion(e); 57 size++; 58 modCount++; 59returnnull; 60} 61} 6263class TreeSet implements Set { 64privatetransient NavigableMap<E,Object> m; 6566public TreeSet() { 67this(new TreeMap<E,Object>()); 68} 6970publicboolean add(E e) { 71return m.put(e, PRESENT)==null; 72} 73} 7475真正的比较是依赖于元素的compareTo()方法,而这个方法是定义在 Comparable里面的。 76所以,你要想重写该方法,就必须是先 Comparable接口。这个接口表示的就是自然排序。 7778
TreeSet存储元素自然排序和唯一的图解
原文:http://www.cnblogs.com/LZL-student/p/5903889.html
内容总结
以上是互联网集市为您收集整理的java 17 - 6 TreeSet集合及其add()方法的源码解析全部内容,希望文章能够帮你解决java 17 - 6 TreeSet集合及其add()方法的源码解析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。