摘要:通過(guò)迭代器,開(kāi)發(fā)人員不需要了解容器底層的結(jié)構(gòu),就可以實(shí)現(xiàn)對(duì)容器的遍歷。由于創(chuàng)建迭代器的代價(jià)小,因此迭代器通常被稱(chēng)為輕量級(jí)的容器。定義如下中定義的方法如下本節(jié)主要總結(jié)了集合相關(guān)的頂層接口,下一節(jié)將分析每一類(lèi)集合實(shí)現(xiàn)類(lèi)。
首先,下面是Collection、Map和、Set接口的相關(guān)架構(gòu)圖
Collection接口
Map接口
圖片來(lái)源:http://www.cnblogs.com/skywan...
和Collection相關(guān)的接口主要有Collection、List和Set接口,其他接口會(huì)在介紹三個(gè)接口中穿插講解。
1、Collection接口Collection是一個(gè)抽象出來(lái)的接口,定義如下:
public interface Collectionextends Iterable {}
其中包括了集合的基本操作,包括:刪除、添加、遍歷、大小等。
Collection中定義方法如下:
int size(); boolean isEmpty(); boolean contains(Object o); Iteratoriterator(); Object[] toArray(); 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); boolean retainAll(Collection> c); void clear(); boolean equals(Object o); int hashCode(); //1.8新增 default boolean removeIf(Predicate super E> filter){} default Spliterator spliterator(){} default Stream stream(){} default Stream parallelStream() {}
AbstractCollection抽象類(lèi)繼承自Collection,實(shí)現(xiàn)了除iterator()和size()的所有方法。定義如下:
public abstract class AbstractCollection2、List接口implements Collection {}
List接口繼承自Collection,List中的元素的允許重復(fù)的。定義如下:
public interface Listextends Collection {}
和Collection不重合、List特有的方法如下:
boolean addAll(int index, Collection extends E> c); default void replaceAll(UnaryOperatoroperator) {} default void sort(Comparator super E> c) {} E get(int index); E set(int index, E element); void add(int index, E element); E remove(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIterator listIterator(); ListIterator listIterator(int index); List subList(int fromIndex, int toIndex);
AbstractList抽象類(lèi)繼承了AbstractCollection,并且實(shí)現(xiàn)了List接口,定義如下:
public abstract class AbstractList3、Set接口extends AbstractCollection implements List {}
Set接口繼承自Collection,Set是數(shù)學(xué)中定義的集合,元素不允許重復(fù)。定義如下:
public interface Setextends Collection {}
Set接口和Collection中方法一致,具體見(jiàn)Collection接口方法。
AbstractSet抽象類(lèi)繼承了AbstractCollection,并且實(shí)現(xiàn)了Set接口,定義如下:
public abstract class AbstractSet二、Map相關(guān)接口和類(lèi)extends AbstractCollection implements Set {}
Map是一種鍵值對(duì)的映射,沒(méi)有繼承Collection接口,具體定義如下:
public interface Map1、Map接口{}
Map接口中定義了添加、刪除、遍歷等相關(guān)方法,具體方法如下:
int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void putAll(Map extends K, ? extends V> m); void clear(); Set2、AbstractMap類(lèi)keySet(); Collection values(); Set > entrySet(); interface Entry {} boolean equals(Object o); int hashCode(); //1.8新增 default V getOrDefault(Object key, V defaultValue) {} default void forEach(BiConsumer super K, ? super V> action) {} default void replaceAll(BiFunction super K, ? super V, ? extends V> function) {} default V putIfAbsent(K key, V value) {} default boolean remove(Object key, Object value) {} default boolean replace(K key, V oldValue, V newValue) {} default V replace(K key, V value) {} default V computeIfAbsent(K key, Function super K, ? extends V> mappingFunction) {} default V computeIfPresent(K key, BiFunction super K, ? super V, ? extends V> remappingFunction) {} default V compute(K key, BiFunction super K, ? super V, ? extends V> remappingFunction) {} default V merge(K key, V value, BiFunction super V, ? super V, ? extends V> remappingFunction){}
AbstractMap抽象類(lèi)實(shí)現(xiàn)了Map接口,實(shí)現(xiàn)Map中定義的方法,定義如下:
public abstract class AbstractMap3、SortedMap和NavigableMap接口implements Map {}
SortedMap表示一個(gè)有序的鍵值映射,排序的方式有兩種:自然排序和指定比較強(qiáng)排序。插入有序的SortedMap的所有元素都必須實(shí)現(xiàn)Comparable接口,具體方法如下:
Comparator super K> comparator(); SortedMapIterator相關(guān)接口subMap(K fromKey, K toKey); SortedMap headMap(K toKey); SortedMap tailMap(K fromKey); K firstKey(); K lastKey(); Set keySet(); Collection values(); Set > entrySet(); NavigableMap是SortedMap接口的擴(kuò)展,有針對(duì)給定搜索目標(biāo)返回最接近匹配項(xiàng)的導(dǎo)航方法。具體方法如下: Map.Entry lowerEntry(K key); K lowerKey(K key); Map.Entry floorEntry(K key); K floorKey(K key); Map.Entry ceilingEntry(K key); K ceilingKey(K key); Map.Entry higherEntry(K key); K higherKey(K key); Map.Entry firstEntry(); Map.Entry lastEntry(); Map.Entry pollFirstEntry(); Map.Entry pollLastEntry(); NavigableMap descendingMap(); NavigableSet navigableKeySet(); NavigableSet descendingKeySet(); NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive); NavigableMap headMap(K toKey, boolean inclusive); NavigableMap tailMap(K fromKey, boolean inclusive); SortedMap subMap(K fromKey, K toKey); SortedMap headMap(K toKey); SortedMap tailMap(K fromKey);
Iterator的工作是遍歷并選擇序列中的對(duì)象,它提供了一種訪(fǎng)問(wèn)一個(gè)容器(container)對(duì)象中的各個(gè)元素,而又不必暴露該對(duì)象內(nèi)部細(xì)節(jié)的方法。通過(guò)迭代器,開(kāi)發(fā)人員不需要了解容器底層的結(jié)構(gòu),就可以實(shí)現(xiàn)對(duì)容器的遍歷。由于創(chuàng)建迭代器的代價(jià)小,因此迭代器通常被稱(chēng)為輕量級(jí)的容器。
1、Iterator接口Iterator接口的定義如下:
public interface Iterator{}
Iterator中定義的方法如下:
boolean hasNext(); E next(); //1.8新增 default void remove() {} default void forEachRemaining(Consumer super E> action) {}2、ListIterator接口
支持在迭代期間向List中添加或刪除元素,并且可以在List中雙向滾動(dòng)。定義如下:
public interface ListIteratorextends Iterator {}
ListIterator中定義的方法如下:
boolean hasNext(); E next(); boolean hasPrevious(); E previous(); int nextIndex(); int previousIndex(); void remove(); void set(E e); void add(E e);
本節(jié)主要總結(jié)了集合相關(guān)的頂層接口,下一節(jié)將分析每一類(lèi)集合實(shí)現(xiàn)類(lèi)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71986.html
摘要:集合工具包是在包中,實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu)數(shù)組棧鏈表隊(duì)列映射和集合。集合主要可以劃分為個(gè)部分列表集合映射工具類(lèi)迭代器枚舉類(lèi)和。集合的框架圖如下圖片來(lái)源集合頂層接口主要有和。和都是集合遍歷相關(guān)接口,是特有的遍歷工具接口 Java集合工具包是在java.util.*包中,實(shí)現(xiàn)了數(shù)據(jù)結(jié)構(gòu):數(shù)組、棧、鏈表、隊(duì)列、映射和集合。Java集合主要可以劃分為4個(gè)部分:List列表、Set集合、Map映射、工具...
摘要:再者,現(xiàn)在互聯(lián)網(wǎng)的面試中上點(diǎn)的都會(huì)涉及一下或者的問(wèn)題個(gè)高級(jí)多線(xiàn)程面試題及回答后端掘金在任何面試當(dāng)中多線(xiàn)程和并發(fā)方面的問(wèn)題都是必不可少的一部分。假如源碼分析之掘金概念是中集合的一種實(shí)現(xiàn)。 攻破 JAVA NIO 技術(shù)壁壘 - 后端 - 掘金現(xiàn)在使用NIO的場(chǎng)景越來(lái)越多,很多網(wǎng)上的技術(shù)框架或多或少的使用NIO技術(shù),譬如Tomcat,Jetty。學(xué)習(xí)和掌握NIO技術(shù)已經(jīng)不是一個(gè)JAVA攻城獅...
摘要:第三階段常見(jiàn)對(duì)象的學(xué)習(xí)集合框架集合在實(shí)際需求中,我們常常會(huì)遇到這樣的問(wèn)題,在諸多的數(shù)據(jù)中,通過(guò)其編號(hào)來(lái)尋找某一些信息,從而進(jìn)行查看或者修改,例如通過(guò)學(xué)號(hào)查詢(xún)學(xué)生信息。面試題和的區(qū)別是單列集合的頂層接口,有子接口和。 第三階段 JAVA常見(jiàn)對(duì)象的學(xué)習(xí) 集合框架——Map集合 showImg(https://segmentfault.com/img/remote/1460000019683...
摘要:第三階段常見(jiàn)對(duì)象的學(xué)習(xí)集合框架概述和集合的遍歷一集合框架的概述集合的由來(lái)如果一個(gè)程序只包含固定數(shù)量的且其生命周期都是已知的對(duì)象,那么這是一個(gè)非常簡(jiǎn)單的程序。進(jìn)而它們的遍歷方式也應(yīng)該是不同的,最終就沒(méi)有定義迭代器類(lèi)。 第三階段 JAVA常見(jiàn)對(duì)象的學(xué)習(xí) 集合框架概述和集合的遍歷 (一) 集合框架的概述 (1) 集合的由來(lái) 如果一個(gè)程序只包含固定數(shù)量的且其生命周期都是已知的對(duì)象,那么這是一...
摘要:每次迭代器進(jìn)結(jié)構(gòu)性修改的時(shí)候都將和進(jìn)行對(duì)比如果兩種相等則說(shuō)明沒(méi)有其他迭代器修改了對(duì)象,可以進(jìn)行。 一、ArrayList簡(jiǎn)介 ArrayList的內(nèi)部實(shí)現(xiàn)了動(dòng)態(tài)數(shù)組,提供了動(dòng)態(tài)的增加和減少元素,繼承AbstractList類(lèi),并且實(shí)現(xiàn)了List、RandomAccess、Cloneable和java.io.Serializable接口。ArrayList是一個(gè)數(shù)組隊(duì)列,提供添加、刪除、...
閱讀 1389·2021-10-14 09:43
閱讀 4243·2021-09-27 13:57
閱讀 4573·2021-09-22 15:54
閱讀 2569·2021-09-22 10:54
閱讀 2385·2021-09-22 10:02
閱讀 2121·2021-08-27 13:11
閱讀 878·2019-08-29 18:44
閱讀 1650·2019-08-29 15:20