java 集合框架快速预览
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
集合 鏈表 隊(duì)列 棧 數(shù)組 映射 java.util.*
Java集合主要可以劃分為4個(gè)部分:List列表、Set集合、Map映射、工具類(Iterator迭代器、Enumeration枚舉類、Arrays和Collections)
Collection
public interface Collection<E> extends Iterable<E>List
public interface List<E> extends Collection<E>Set
public interface Set<E> extends Collection<E>Queue
public interface Queue<E> extends Collection<E>Map
public interface Map<K,V>大致說明
看上面的框架圖,先抓住它的主干,即Collection和Map
Collection包含了List和Set兩大分支
- List是一個(gè)有序的隊(duì)列,每一個(gè)元素都有它的索引。第一個(gè)元素的索引值是0
List的實(shí)現(xiàn)類有LinkedList, ArrayList, Vector, Stack
- Set是一個(gè)不允許有重復(fù)元素的集合
Set的實(shí)現(xiàn)類有HastSet和TreeSet
HashSet依賴于HashMap,它實(shí)際上是通過HashMap實(shí)現(xiàn)的
TreeSet依賴于TreeMap,它實(shí)際上是通過TreeMap實(shí)現(xiàn)的
AbstractMap是個(gè)抽象類,它實(shí)現(xiàn)了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是繼承于AbstractMap
Hashtable雖然繼承于Dictionary,但它實(shí)現(xiàn)了Map接口
- terator 它是遍歷集合的工具,即我們通常通過Iterator迭代器來遍歷集合
我們說Collection依賴于Iterator,是因?yàn)镃ollection的實(shí)現(xiàn)類都要實(shí)現(xiàn)iterator()函數(shù),返回一個(gè)Iterator對(duì)象
ListIterator是專門為遍歷List而存在的
- Enumeration
它是JDK 1.0引入的抽象類。作用和Iterator一樣,也是遍歷集合;但是Enumeration的功能要比Iterator少
Collection架構(gòu)
AbstractCollection抽象類,它實(shí)現(xiàn)了Collection中的絕大部分函數(shù),在Collection的實(shí)現(xiàn)類中,我們就可以通過繼承AbstractCollection省去重復(fù)編碼
AbstractList和AbstractSet都繼承于AbstractCollection,具體的List實(shí)現(xiàn)類繼承于AbstractList,而Set的實(shí)現(xiàn)類則繼承于AbstractSet
Collection 介紹
下面是JDK1.8的實(shí)現(xiàn),它是一個(gè)接口,是高度抽象出來的集合,它包含了集合的基本操作:添加、刪除、清空、遍歷(讀取)、是否為空、獲取大小、是否保護(hù)某元素等等
public interface Collection<E> extends Iterable<E> {int size();boolean isEmpty();boolean contains(Object var1);Iterator<E> iterator();Object[] toArray();<T> T[] toArray(T[] var1);boolean add(E var1);boolean remove(Object var1);boolean containsAll(Collection<?> var1);boolean addAll(Collection<? extends E> var1);boolean removeAll(Collection<?> var1);default boolean removeIf(Predicate<? super E> var1) {Objects.requireNonNull(var1);boolean var2 = false;Iterator var3 = this.iterator();while(var3.hasNext()) {if (var1.test(var3.next())) {var3.remove();var2 = true;}}return var2;}boolean retainAll(Collection<?> var1);void clear();boolean equals(Object var1);int hashCode();default Spliterator<E> spliterator() {return Spliterators.spliterator(this, 0);}default Stream<E> stream() {return StreamSupport.stream(this.spliterator(), false);}default Stream<E> parallelStream() {return StreamSupport.stream(this.spliterator(), true);} }List簡(jiǎn)介
public interface List<E> extends Collection<E>AbstractCollection
實(shí)現(xiàn)了Collection 有兩個(gè)方法 iterator和size沒有實(shí)現(xiàn)
public abstract Iterator<E> iterator();public abstract int size();里面的一些主要實(shí)現(xiàn)是基于iterator的,比如toArray()、remove()
public Object[] toArray() {// Estimate size of array; be prepared to see more or fewer elementsObject[] r = new Object[size()];Iterator<E> it = iterator();for (int i = 0; i < r.length; i++) {if (! it.hasNext()) // fewer elements than expectedreturn Arrays.copyOf(r, i);r[i] = it.next();}return it.hasNext() ? finishToArray(r, it) : r;} public boolean remove(Object o) {Iterator<E> it = iterator();if (o==null) {while (it.hasNext()) {if (it.next()==null) {it.remove();return true;}}} else {while (it.hasNext()) {if (o.equals(it.next())) {it.remove();return true;}}}return false;}注意點(diǎn):add方法需要實(shí)現(xiàn)類自己具體去重寫
/*** {@inheritDoc}** <p>This implementation always throws an* <tt>UnsupportedOperationException</tt>.** @throws UnsupportedOperationException {@inheritDoc}* @throws ClassCastException {@inheritDoc}* @throws NullPointerException {@inheritDoc}* @throws IllegalArgumentException {@inheritDoc}* @throws IllegalStateException {@inheritDoc}*/public boolean add(E e) {throw new UnsupportedOperationException();}轉(zhuǎn)載于:https://my.oschina.net/kipeng/blog/1836988
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的java 集合框架快速预览的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xgboost使用调参
- 下一篇: Netty 系列三(ByteBuf).