set----散列集

来源:互联网 发布:webpack this windows 编辑:程序博客网 时间:2024/06/16 04:48

接口  继承结构:

  • java.lang.Iterable<T>
    • java.util.Collection<E>
      • java.util.List<E>
      • java.util.Queue<E>
        • java.util.Deque<E>
      • java.util.Set<E>
        • java.util.SortedSet<E>
          • java.util.NavigableSet<E> 

类型继承结构:

  • java.util.AbstractSet<E> (implements java.util.Set<E>)
    • java.util.EnumSet<E> (implements java.lang.Cloneable, java.io.Serializable)
    • java.util.HashSet<E> (implements java.lang.Cloneable, java.io.Serializable,java.util.Set<E>)
      • java.util.LinkedHashSet<E> (implements java.lang.Cloneable, java.io.Serializable, java.util.Set<E>)
    • java.util.TreeSet<E> (implements java.lang.Cloneable,java.util.NavigableSet<E>,java.io.Serializable) 
注意HashSet和TreeSet继承的接口的不同一个是java.util.Set<E>, java.util.NavigableSet<E>

sortedSet增加的方法 :Comparator<? super E> Compare()思考为什么用? super E                First()last()
NavigableSet增加的方法:higher() lower() ceilling() floor() pollFirst() pollLast() 
TreeSet增加的方法:HeadSet SubSet tailSet

HashSet和TreeSet区别:

  • HashSet和TreeSet继承的接口的不同一个是java.util.Set<E>, java.util.NavigableSet<E>
  • HashSet实现的是普通的散列表  和TreeSet 则是红黑树的数据结构
  • HashSet是无序的,TreeSet是有序的
  • HashSet的查询效率更高,Treeset略低
  • 注意一下HashSet的多种构造方法

TreeSet<E>是如何知道元素应该如何排列呢?

  1. 在E上实现comparable<E>接口,默认会使用该接口的compareTo方法来比较,但是有一个缺点:就是同一个E类,可能在不同的TreeSet中需要不同比较方法
  2. 定义一个Comparator的子类   并将其传入TreeSet,这是一种策略模式,这样就给不同的Treeset定义了不同的元素比较方法。例子 :P575           比较方法就是Comparator的compare(a,b)方法
  3. 有时候Comparator可以使用匿名内部类来实现。

注意:

1凡是实现了set<E>的      E都应该实现hashCode,且如果a.equals(b)为true,a,b必须具有相同的散列码

0 0
原创粉丝点击