1. 程式人生 > >每天五分鐘搞定Java面試

每天五分鐘搞定Java面試

Set集合有個重要的性質:元素不重複

Set是Collection的子介面,Collection是Iterable子介面

public interface Set<E> extends Collection<E> {
        int size();
    boolean isEmpty();
    boolean contains(Object o);
    Iterator<E> iterator();
    Object[] toArray();
    <T> T[] toArray(T[] a);
    boolean
add(E e); boolean remove(Object o); boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); default boolean removeIf(Predicate<? super E> filter) { Objects.requireNonNull(filter); boolean
removed = false; final Iterator<E> each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove(); removed = true; } } return removed; } boolean retainAll(Collection<?> c); void
clear(); boolean equals(Object o); int hashCode(); default Spliterator<E> spliterator() { return Spliterators.spliterator(this, 0); } }

同時繼承Collection介面的parallelStream, removeIf, stream方法

父介面 : Collection, Iterable
子介面: NavigableSet, SortedSet
實現類: AbstractSet, ConcurrentHashMap.KeySetView, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet

通過看原始碼,會發現Set介面中的方法在Collection中已經定義過,為什麼還要在Set中重寫父類方法。當然方法之上的註釋是有差別的。
List、Set和Queue雖然都是Collection的子介面,但是他們的性質不同,比如說Set中的元素是不可重複的,通過重寫父類方法,並且修改註釋,可以更好的進行區分,使用時也更加清晰明確。同時Set介面下還有子介面,如果我們通過它的子介面檢視父介面,發現其中沒有任何方法,那還要再往上查詢父介面。這種分層的設計,也使得集合介面的變更更加靈活,假設如果Collection介面哪天廢棄了,List介面及其子介面依舊可以提供服務。