zoukankan      html  css  js  c++  java
  • Java学习

    Java Set 用法

    Java 的set接口由两种类实现,一种是底层基于散列表的HashSet,另一种是底层基于红黑树的TreeSet。此外,HashSet还有派生类LinkedHashSet。

    set代表的是数学上的集合的意思,所以set中的元素不可以重复
    所以set中查找是最为重要的操作。

    HashSet, LinkedHashSet 以及 TreeSet之间的区别

    性能和速度:他们之间的第一个区别来自速度,HashSet 是最快的,LinkedHashSet 在性能方面排第二,或者近乎接近于HashSet,TreeSet稍微慢一些,因为每一次插入元素都需要执行排序操作。TreeSet 对于常见操作如add,remove,contains等能够保证时间复杂度为 O(log(n)) ,而 HashSet 和 LinkedHashSet 对于add,contains,remove等操作提供时间复杂度为常数时间的性能,因为HashSet为给定散列函数在桶中均匀分配元素。

    排序性:HashSet 不保证元素的任何顺序,而LinkedHashSet 保持元素的插入顺序,更多的像List接口一样,TreeSet 按照元素实现的比较接口保持元素的顺序。

    内部实现:HashSet底层基于一个HashMap实例,LinkedHashSet 基于HashSet和LinkedList实现,TreeSet底层基于NavigableMap接口实现,java中默认用TreeMap实现。

    null值:HashSet 和 LinkedHashSet允许null值,但是TreeSet 不支持null值,并且当你向TreeSet中插入null值时会抛出 java.lang.NullPointerException 异常。因为TreeSet应用 compareTo() 方法于各个元素来比较他们,当比较null值时会抛出 NullPointerException异常。

    比较(Comparison ):HashSet 和 LinkedHashSet 用 equals() 方法用于比较,但是TreeSet 用 compareTo() 方法用于维持元素顺序。这就是为什么在java中compareTo()和 equals() 必须保持一致,否则会打破Set接口的一些通用规则,比如可能会允许重复值。

    何时用 HashSet, TreeSet 以及 LinkedHashSet

    所有三种Set接口实现都可以用于通用的Set操作,比如不允许重复元素,但是三者又都有其独特的特性,所以在特定的环境下可以有更合适的选择。 由于TreeSet保持元素顺序,所以当你需要一个集合保持元素顺序并且不允许重复元素时,可以使用TreeSet;HashSet是通用的Set集合实现,如果你需要一个效率比较快、且不允许重复元素的集合,则可以使用HashSet;LinkedHashSet 是HashSet的扩展,它更适合当你需要保持元素的插入顺序时使用,更像一个不牺牲昂贵性能的List。LinkedHashSet 的另一个用法是用于创建一个已经存在的Set集合的副本,因为LinkedHashSet 保持插入顺序,它返回包含同一顺序的相同元素的集合,更像精确的复制。总之,尽管他们三个都是Set接口的实现,但是他们均有各自独特的特性,HashSet是一个通用功能的Set,而LinkedHashSet 提供元素插入顺序保证,TreeSet是一个SortedSet实现,由Comparator 或者 Comparable指定的元素顺序存储元素。

    Set 的使用

    创建方式

    HashSet<Integer> st = new HashSet<Integer>();
    

    插入元素

    st.add(...); 
    

    删除元素

    st.remove(...);
    

    存在性判断

    st.contains(...); // 返回boolean
    

    判空

    st.isEmpty(); // 返回boolean 
    

    容量

    st.size(); // 返回逻辑大小
    
    ---- suffer now and live the rest of your life as a champion ----
  • 相关阅读:
    总结Spring Set注入方式及对property标签的理解
    spring基于Annotation装配Bean时在bean.xml中添加<context:component-scan>标签报错
    java web(struts2)+python+mysql 的简单实践
    罗辑思维--怎样成为一个高手
    教练助手
    小组作业(第五组)
    个人开发总结
    第五组小组作业
    个人作业
    小组总结
  • 原文地址:https://www.cnblogs.com/popodynasty/p/13845689.html
Copyright © 2011-2022 走看看