精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基礎(chǔ)篇:Java集合,面試專(zhuān)用

開(kāi)發(fā) 后端
CopyOnWriteArrayList 的線程安全:CopyOnWriteArrayList 在寫(xiě)的時(shí)候會(huì)加鎖,為了保證寫(xiě)安全,會(huì)在寫(xiě)操作時(shí)復(fù)制一個(gè)新數(shù)組來(lái)操作,然后覆蓋舊的數(shù)組;不會(huì)影響讀的性能。

本文轉(zhuǎn)載自微信公眾號(hào)「潛行前行」,作者 cscw。轉(zhuǎn)載本文請(qǐng)聯(lián)系潛行前行公眾號(hào)。

沒(méi)啥好說(shuō)的,在座的各位都是靚仔

  • List 數(shù)組
  • Vector 向量
  • Stack 棧
  • Map 映射字典
  • Set 集合
  • Queue 隊(duì)列
  • Deque 雙向隊(duì)列

一般隊(duì)列的通用方法

操作方法 拋出異常 阻塞線程 返回特殊值 超時(shí)退出
插入元素 add(e) put(e) offer(e) offer(e, timeout, unit)
移除元素 remove() take() poll() pull(timeout, unit)
檢查 element() peek() 無(wú) 無(wú)

1.List 數(shù)組

  • 元素按進(jìn)入先后有序保存,可重復(fù)
  • List有兩種底層實(shí)現(xiàn),一種是數(shù)組,一種是鏈表,而鏈表的實(shí)現(xiàn)繼承了 Collection。數(shù)組和集合的區(qū)別:
    • 數(shù)組大小是固定,集合是可變的
    • 數(shù)組的元素可以基本類(lèi)型也可以是引用類(lèi)型,而集合只能是引用類(lèi)型

ArrayList

  • ArrayList底層是使用一個(gè)可動(dòng)態(tài)擴(kuò)容的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒(méi)有固定大小的限制,可以添加或刪除元素
  • 它的特點(diǎn)就是讀速度、更新快,增刪慢;內(nèi)存相鄰,根據(jù)Index讀取的時(shí)間復(fù)雜度是O(1);可以存儲(chǔ)重復(fù)元素,但線程不安全
  • ArrayList 的擴(kuò)容機(jī)制
  1. //ArrayList openJDK 13 
  2. private void add(E e, Object[] elementData, int s) { 
  3.     if (s == elementData.length) //放不下了 
  4.         elementData = grow(); // 擴(kuò)容 
  5.     elementData[s] = e; 
  6.     size = s + 1; 
  7. private Object[] grow() { 
  8.     return grow(size + 1); 
  9. private Object[] grow(int minCapacity) { 
  10.     int oldCapacity = elementData.length; 
  11.     if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { 
  12.         int newCapacity = ArraysSupport.newLength(oldCapacity, 
  13.                 minCapacity - oldCapacity,  // minCapacity - oldCapacity == 1 
  14.                 oldCapacity >> 1 ); // oldCapacity == 1/2 oldCapacity 
  15.         return elementData = Arrays.copyOf(elementData, newCapacity); 
  16.     } else { 
  17.         return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)]; 
  18.     } 
  • 如果當(dāng)前元素放不下,則擴(kuò)容至 1.5 倍,且大于等于 1
  1. // ArraysSupport.newLength 
  2. public static int newLength(int oldLength, int minGrowth, int prefGrowth) { 
  3.     //prefGrowth 是 oldLength 的 1/2,minGrowth 是 1。因此 newLength = 1.5 oldLength 
  4.     int newLength = Math.max(minGrowth, prefGrowth) + oldLength; 
  5.     if (newLength - MAX_ARRAY_LENGTH <= 0) { // MAX_ARRAY_LENGTH = Integer.MAX_VALUE - 8 
  6.         return newLength; 
  7.     } 
  8.     return hugeLength(oldLength, minGrowth); 

LinkedList

  • LinkedList的節(jié)點(diǎn)并不是存儲(chǔ)真實(shí)的數(shù)據(jù),而是存下數(shù)據(jù)的引用對(duì)象,而且節(jié)點(diǎn)之間使用引用相關(guān)聯(lián)
  • LinkedList實(shí)現(xiàn)了Queue、Deque接口,可作為隊(duì)列使用;查找慢,增刪快,可以存儲(chǔ)重復(fù)元素,但線程不安全
  • 使用 LinkedList 實(shí)現(xiàn)LRU
  1. public static class LRU<T> { 
  2.     //默認(rèn)的緩存大小 
  3.     private  int CAPACITY = 0; 
  4.     //引用一個(gè)雙向鏈接表 
  5.     private LinkedList<T> list; 
  6.     //構(gòu)造函數(shù) 
  7.     public LRU(int capacity) { 
  8.         this.CAPACITY = capacity; 
  9.         list = new LinkedList(); 
  10.     } 
  11.     //添加一個(gè)元素 
  12.     public synchronized void put(T object) { 
  13.         if (list != null && list.contains(object)) { 
  14.             list.remove(object); 
  15.         } 
  16.         removeLeastVisitElement(); 
  17.         list.addFirst(object); 
  18.     } 
  19.     //移除最近訪問(wèn)次數(shù)最少的元素 
  20.     private void removeLeastVisitElement() { 
  21.         int size = list.size(); 
  22.         //注意,這兒必須得是CAPACITY - 1否則所獲的size比原來(lái)大1 
  23.         if (size > (CAPACITY - 1)) { 
  24.             Object object = list.removeLast(); 
  25.         } 
  26.     } 
  27.     //獲取第N個(gè)索引下面的元素 
  28.     public  T get(int index) { 
  29.         return list.get(index); 
  30.     } 
  • LinkedList 的 API
  1. public E getFirst() //獲取第一個(gè)元素 
  2. public E getLast()  //獲取最后一個(gè)元素 
  3. public E removeFirst() // 移除第一個(gè)元素,并返回 
  4. public E removeLast() // 移除最后一個(gè)元素,并返回 
  5. public void addFirst(E e) //加入頭部 
  6. public void addLast(E e)  //加入尾部 
  7. public void add(E e) //加入尾部 
  8. public boolean contains(Object o) //是否包含 元素 o 
  9. public E peek() //獲取頭部第一個(gè)元素 
  10. public E element()  // 獲取頭部第一個(gè)元素,不存在則報(bào)錯(cuò) 
  11. public E poll() //獲取頭部第一個(gè)元素,并移除 
  12. public boolean offer(E e) // 調(diào)用 add(E e) 
  13. public boolean offerFirst(E e) // 調(diào)用 addFirst 
  14. public boolean offerLast(E e) // 調(diào)用 addLast 
  15. public void push(E e) //在頭部壓入一個(gè)元素 
  16. public E pop()  //彈出第一個(gè)元素,并移除。不存在則報(bào)錯(cuò) 
  • ArrayList 和 LinkedList 使用場(chǎng)景
    • 頻繁訪問(wèn)列表中的某一個(gè)元素,或者需要在列表末尾進(jìn)行添加和刪除元素操作,用ArrayList
    • 頻繁的在列表開(kāi)頭、中間、末尾等位置進(jìn)行添加和刪除元素操作,用LinkedList

Iterator 和 fast-fail、fail-safe機(jī)制

  • Java Iterator(迭代器)不是一個(gè)集合,它是一種用于訪問(wèn)集合的方法,可用于迭代 List 和 Set 等集合,主要有hashNext(),next(),remove()三種方法
  • fail-fast 是Java集合(Collection)的一種錯(cuò)誤機(jī)制。當(dāng)多個(gè)線程對(duì)同一個(gè)集合進(jìn)行修改結(jié)構(gòu)操作,使用集合的迭代器iterator,會(huì)首先檢測(cè)是否有對(duì)集合的并發(fā)修改,進(jìn)而產(chǎn)生ConcurrentModificationException 異常提示
  • fail-safe:保證在對(duì)任何集合結(jié)構(gòu)的修改操作都基于 《復(fù)制-修改》 進(jìn)行的,即先copy一個(gè)新的集合對(duì)象,然后對(duì)新的集合對(duì)象進(jìn)行修改,最后將新的集合對(duì)象替換掉老的集合對(duì)象(老的集合對(duì)象的地址指向新的集合對(duì)象)。java.util.concurrent包下采用的是fail-safe機(jī)制。
    • 缺點(diǎn)1-對(duì)集合的復(fù)制copy會(huì)產(chǎn)生大量的對(duì)象,造成內(nèi)存空間的浪費(fèi)。
    • 缺點(diǎn)2-無(wú)法保證集合迭代過(guò)程中獲取的集合數(shù)據(jù)是最新的內(nèi)容

CopyOnWriteArrayList

  • CopyOnWriteArrayList 的線程安全:CopyOnWriteArrayList 在寫(xiě)的時(shí)候會(huì)加鎖,為了保證寫(xiě)安全,會(huì)在寫(xiě)操作時(shí)復(fù)制一個(gè)新數(shù)組來(lái)操作,然后覆蓋舊的數(shù)組;不會(huì)影響讀的性能
  1. public class CopyOnWriteArrayList<E> 
  2.     implements List<E>, RandomAccess, Cloneable, java.io.Serializable { 
  3.     //可重入鎖 
  4.     final transient ReentrantLock lock = new ReentrantLock(); 
  5.     //數(shù)組,僅通過(guò)get和set方法操作 
  6.     private transient volatile Object[] array;  
  7.     .... 
  8.     public boolean add(E e) { 
  9.         final ReentrantLock lock = this.lock; 
  10.         lock.lock(); 
  11.         try { 
  12.             Object[] elements = getArray();//拿到當(dāng)前數(shù)組 
  13.             int len = elements.length;//獲得長(zhǎng)度 
  14.             //拷貝當(dāng)前數(shù)組 
  15.             Object[] newElements = Arrays.copyOf(elements, len + 1); 
  16.             newElements[len] = e; 
  17.             setArray(newElements); //調(diào)用set方法將新數(shù)組設(shè)置為當(dāng)前數(shù)組 
  18.             return true
  19.         } finally { 
  20.             lock.unlock();//解鎖 
  21.         } 
  22.     } 
  • CopyOnWriteArrayList 的缺點(diǎn)
    • CopyOnWrite 在進(jìn)行寫(xiě)操作的時(shí)候,內(nèi)存里會(huì)同時(shí)駐扎兩個(gè)對(duì)象的內(nèi)存,導(dǎo)致內(nèi)存的浪費(fèi)
    • CopyOnWrite 容器只能保證數(shù)據(jù)的最終一致性,不能保證數(shù)據(jù)的實(shí)時(shí)一致性。如果你希望寫(xiě)入的的數(shù)據(jù),馬上能讀到,請(qǐng)不要使用CopyOnWrite容器,沒(méi)有阻塞等待的概念
  • CopyOnWriteArrayList 和 Collections.synchronizedList 區(qū)別
    • CopyOnWriteArrayList 的寫(xiě)操作性能較差,而多線程的讀操作性能較好
    • Collections.synchronizedList的寫(xiě)操作性能比CopyOnWriteArrayList在多線程操作的情況下要好很多,而讀操作因?yàn)槭遣捎昧? synchronized關(guān)鍵字的方式,其讀操作性能并不如CopyOnWriteArrayList

線程安全的List

  • A:使用 Vector;B:使用 Collections.synchronized() 返回線程安全的 List;C:使用 CopyOnWriteArrayList

List的API示例

  1. boolean contains(Object o) // 是否包含 o 
  2. boolean isEmpty(); // 是否為空 
  3. int size(); //集合元素 
  4. Iterator<E> iterator(); // 返回迭代器 
  5. Object[] toArray(); // 轉(zhuǎn)為 Object數(shù)組 
  6. <T> T[] toArray(T[] a); // 轉(zhuǎn)為具體類(lèi)型數(shù)組 
  7. boolean add(E e); // 加入尾部 
  8. boolean remove(Object o); // 移除 o 
  9. boolean containsAll(Collection<?> c); //是否報(bào)考 集合 c 
  10. boolean addAll(Collection<? extends E> c);// 合并 c  
  11. boolean retainAll(Collection<?> c);//保留只存在集合 c 的元素 
  12. void clear(); // 清除集合元素 
  13. void sort(Comparator<? super E> c) //根據(jù) Comparator 排序 
  14. E get(int index); // 根據(jù)下標(biāo)獲取 元素 
  15. set(int index, E element); // 設(shè)置第 index 的元素 
  16. E remove(int index); // 移除 第 index 的元素 
  17. <E> List<E> of(E e1.....) // jdk 9 
  18. List<E> copyOf(Collection<? extends E> coll)  // 復(fù)制 

2.Vector(向量)

ArrayList 和 Vector、LinkedList 的區(qū)別

  • Vector 相當(dāng)于是 ArrayList 線程安全的翻版
  • Vector 繼承實(shí)現(xiàn)List 特點(diǎn): 底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,線程安全

Vector 的API示例

  1. boolean synchronized contains(Object o); 
  2. boolean synchronized isEmpty(); 
  3. boolean synchronized containsAll(Collection<?> c); 
  4. boolean addAll(Collection<? extends E> c); 
  5. public synchronized boolean add(E e) 
  6. public synchronized E get(int index); 
  7. public synchronized E set(int index, E element); 
  8. public synchronized E firstElement() 
  9. public synchronized void removeElementAt(int index
  10. public synchronized E lastElement() 
  11. public synchronized void setElementAt(E obj, int index
  12. public synchronized E remove(int index
  13. public void clear() 
  14. Iterator<E> iterator(); 

3.Stack(棧)

  • Stack 是 Vector提供的一個(gè)子類(lèi),用于模擬"棧"這種數(shù)據(jù)結(jié)構(gòu)(LIFO后進(jìn)先出)
  • 線程安全,允許 null 值

Stack 的API示例

  1. public E push(E item) //推入棧頂 
  2. public synchronized E pop() // 彈出棧頂元素,不存在則報(bào)錯(cuò) 
  3. public synchronized E peek() // 獲取棧頂元素,不移除 
  4. public boolean empty()  // 棧是否為空 
  5. public synchronized int search(Object o) // 搜索元素  

4.Map

  • Map 用于保存具有映射關(guān)系的數(shù)據(jù),Map里保存著兩種映射的數(shù)據(jù):key和value,它們都可以使任何引用類(lèi)型的數(shù)據(jù),但key不能重復(fù)。所以通過(guò)指定的key就可以取出對(duì)應(yīng)的value
  • 請(qǐng)注意!!!Map 沒(méi)有繼承 Collection 接口

TreeMap(1.8JDK)

  • 繼承 AbstractMap,TreeMap 是基于紅黑樹(shù)實(shí)現(xiàn),可保證在log(n)時(shí)間復(fù)雜度內(nèi)完成 containsKey,get,put 和 remove 操作,效率很高。(紅黑樹(shù)的原理這里不展開(kāi)講,后面會(huì)專(zhuān)門(mén)寫(xiě)一篇)
  • 另一方面,由于 TreeMap 基于紅黑樹(shù)實(shí)現(xiàn),因此 TreeMap 的鍵是有序的

HashMap

  • HashMap 繼承AbstractMap類(lèi)實(shí)現(xiàn)了Map,是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。HashMap 實(shí)現(xiàn)了 Map 接口,根據(jù)鍵的 HashCode 值存儲(chǔ)數(shù)據(jù),具有很快的訪問(wèn)速度,最多允許一條記錄的鍵為 null,不支持線程同步。HashMap 是無(wú)序的,即不會(huì)記錄插入的順序
  • HashMap如何處理hash沖突,hash沖突的幾種解決方法
    • 鏈地址法-如果存在 hash 碰撞,則創(chuàng)建一鏈表存儲(chǔ)相同的元素
    • 開(kāi)放定址法容易導(dǎo)致 hash 碰撞,查詢慢
    • 線性探查在散列的時(shí)候,如果當(dāng)前計(jì)算出的位置已經(jīng)被存儲(chǔ),那么就順序的向后查找,知道找到空位置或則是所有位置均不為空失敗
    • 二次探查使用一個(gè)輔助散列函數(shù),使得后續(xù)的探查位置在前一個(gè)探查位置上加上一個(gè)偏移量,該偏移量以二次方的形式依賴于探查號(hào)i。二次探查的散列函數(shù)形式為:h(k,i)=(h'(k,i)+c1*i + c2 * i^2) mod m
    • 雙重散列使用兩個(gè)輔助散列函數(shù)h1和h2,初始的散列位置是h1(k),后續(xù)的散列位置在此基礎(chǔ)上增加一個(gè)偏移量h2(k)*i mod m
    • 開(kāi)放定址法
    • 鏈地址法
  • HashMap 底層實(shí)現(xiàn)是數(shù)組+鏈表+紅黑樹(shù)。空參的HashMap初始容量是16,默認(rèn)加載因子為0.75。取值0.75是因?yàn)?0.5 容易浪費(fèi)空間,取值 1 則需要填滿每一個(gè)桶,實(shí)際情況很難達(dá)到,會(huì)產(chǎn)生大量的哈希碰撞。因此取中間值
  • HashMap 的容量一般是 2 的冪次方,可直接使用“位與”計(jì)算 hash 值,相對(duì)取模計(jì)算 hash 快

Hashtable

  • 繼承于Dictionary,現(xiàn)在基本已被淘汰
  • HashTable的操作幾乎和HashMap一致,主要的區(qū)別在于HashTable為了實(shí)現(xiàn)多線程安全,在幾乎所有的方法上都加上了synchronized鎖,而加鎖的結(jié)果就是HashTable操作的效率十分低下
  • HashMap允許有一個(gè)鍵為null,允許多個(gè)值為null;但HashTable不允許鍵或值為null
  • Hash映射:HashMap的hash算法通過(guò)非常規(guī)設(shè)計(jì),將底層table長(zhǎng)度設(shè)計(jì)為2的冪,使用位與運(yùn)算代替取模運(yùn)算,減少運(yùn)算消耗;而HashTable的hash算法首先使得hash值小于整型數(shù)最大值,再通過(guò)取模進(jìn)行散射運(yùn)算

LinkedHashMap

  • LinkedHashMap的元素存取過(guò)程基本與HashMap基本類(lèi)似,只是在細(xì)節(jié)實(shí)現(xiàn)上稍有不同。當(dāng)然,這是由LinkedHashMap本身的特性所決定的,因?yàn)樗~外維護(hù)了一個(gè)雙向鏈表用于保持迭代順序。此外,LinkedHashMap可以很好的支持LRU算法。HashMap和雙向鏈表合二為一即是LinkedHashMap

WeakHashMap

  • WeakHashMap 也是一個(gè)散列表,它存儲(chǔ)的內(nèi)容也是鍵值對(duì)(key-value)映射,而且鍵和值都可以是 null
  • WeakHashMap的鍵是“弱鍵”。在 WeakHashMap 中,當(dāng)某個(gè) key 不再被強(qiáng)引用使用時(shí),會(huì)被從WeakHashMap中被 JVM 自動(dòng)移除,然后它對(duì)應(yīng)的鍵值對(duì)也會(huì)被從WeakHashMap中移除。?JAVA引用類(lèi)型和ThreadLocal

ConcurrentHashMap(1.8JDK)

  • ConcurrentHashMap 是 HashMap 的多線程安全版本。它使用了細(xì)粒度鎖 和 cas 提高了在多線程環(huán)境的安全性和高并發(fā)
  • 底層數(shù)據(jù)結(jié)構(gòu)是 數(shù)組 + 鏈表/紅黑樹(shù)(后面專(zhuān)門(mén)寫(xiě)一篇介紹)

ConcurrentSkipListMap 了解一波

  • ConcurrentSkipListMap 則是基于跳躍鏈表的實(shí)現(xiàn)的 map,使用了 cas 技術(shù)實(shí)現(xiàn)線程安全性,高并發(fā)
  • ConcurrentSkipListMap 相比 ConcurrentHashMap 的優(yōu)點(diǎn)
    • ConcurrentSkipListMap 的key是有序的。
    • ConcurrentSkipListMap 支持更高的并發(fā)。ConcurrentSkipListMap的存取時(shí)間是log(N),和線程數(shù)幾乎無(wú)關(guān)。也就是說(shuō)在數(shù)據(jù)量一定的情況下,并發(fā)的線程越多,ConcurrentSkipListMap 越能體現(xiàn)出它的優(yōu)勢(shì)

NavigableMap 和 ConcurrentNavigableMap 操作 key 值的范圍區(qū)間

  • TreeMap 實(shí)現(xiàn)了 NavigableMap 。ConcurrentNavigableMap 高并發(fā)線程安全版的 TreeMap
  • NavigableMap 提供了針對(duì)給定搜索目標(biāo)返回最接近匹配項(xiàng)的導(dǎo)航方法。直接看API
  1. K lowerKey(K key)  // 找到第一個(gè)比指定的key小的值 
  2. K floorKey(K key)  // 找到第一個(gè)比指定的key小于或等于的key 
  3. K ceilingKey(K key) // 找到第一個(gè)大于或等于指定key的值 
  4. K higherKey(K key) // 找到第一個(gè)大于指定key的值 
  5. Map.Entry<K,V> firstEntry() // 獲取最小值 
  6. Map.Entry<K,V> lastEntry() // 獲取最大值 
  7. Map.Entry<K,V> pollFirstEntry() // 刪除最小的元素 
  8. Map.Entry<K,V> pollLastEntry() // 刪除最大的元素 
  9. NavigableMap<K,V> descendingMap() //返回一個(gè)倒序的Map  
  10. // 返回值小于 toKey 的 NavigableMap 
  11. NavigableMap<K,V> headMap(K toKey, boolean inclusive) 
  12. // 返回值大于 fromKey 的 NavigableMap 
  13. NavigableMap<K,V> tailMap(K fromKey, boolean inclusive) 
  14. // 返回值小于 toKey 大于 的 fromKey NavigableMap 
  15. NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey,   boolean toInclusive) 

5.Set(集合)

  • Set特點(diǎn):元素?zé)o放入順序,元素不可重復(fù),如果加入重復(fù)元素,會(huì)保留最先加入的對(duì)象。存取速度快

Set 的幾種實(shí)現(xiàn)子類(lèi)和各自特點(diǎn)

  • TreeSet:底層數(shù)據(jù)結(jié)構(gòu)采用二叉樹(shù)來(lái)實(shí)現(xiàn),元素唯一且已經(jīng)排好序;唯一性同樣需要重寫(xiě) hashCode 和 equals()方法,二叉樹(shù)結(jié)構(gòu)保證了元素的有序
    • 根據(jù)構(gòu)造方法不同,分為自然排序(無(wú)參構(gòu)造)和比較器排序(有參構(gòu)造),自然排序要求元素必須實(shí)現(xiàn)Compareable接口,并重寫(xiě)里面的compareTo()方法
  • HashSet:是哈希表實(shí)現(xiàn)的,HashSet中的數(shù)據(jù)是無(wú)序的,可以放入 null,但只能放入一個(gè)null,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫(kù)中唯一約束
    • HashSet 是基于 HashMap 算法實(shí)現(xiàn)的,其性能通常都優(yōu)于TreeSet
    • 為快速查找而設(shè)計(jì)的Set,我們通常都會(huì)用到HashSet,若需要排序的功能時(shí),才使用TreeSet
  • LinkedHashSet:底層數(shù)據(jù)結(jié)構(gòu)采用鏈表和哈希表共同實(shí)現(xiàn),鏈表保證了元素的順序與存儲(chǔ)順序一致,哈希表保證了元素的唯一性,效率高。但線程不安全

ConcurrentSkipListSet

  • 基于 ConcurrentSkipListMap 實(shí)現(xiàn)

CopyOnWriteArraySet

  • 基于 CopyOnWriteArrayList 實(shí)現(xiàn)

BitSet

  • BitSet是位操作的對(duì)象,值只有 0 或 1 即false和true,內(nèi)部維護(hù)了一個(gè)long數(shù)組,初始只有一個(gè)long,所以BitSet最小的size是64,當(dāng)隨著存儲(chǔ)的元素越來(lái)越多,BitSet內(nèi)部會(huì)動(dòng)態(tài)擴(kuò)充,最終內(nèi)部是由N個(gè)long來(lái)存儲(chǔ)
  • 如統(tǒng)計(jì)40億個(gè)數(shù)據(jù)中沒(méi)有出現(xiàn)的數(shù)據(jù),將40億個(gè)不同數(shù)據(jù)進(jìn)行排序等。\
  • 現(xiàn)在有1千萬(wàn)個(gè)隨機(jī)數(shù),隨機(jī)數(shù)的范圍在1到1億之間。現(xiàn)在要求寫(xiě)出一種算法,將1到1億之間沒(méi)有在隨機(jī)數(shù)中的數(shù)求出來(lái)
  1. void and(BitSet set) // 兩個(gè)BitSet 做與操作,結(jié)果并存入當(dāng)前 BitSet 
  2. void andNot(BitSet set) //  兩個(gè)BitSet 與非操作 
  3. void flip(int index) // 反轉(zhuǎn)某一個(gè)指定 index  
  4. boolean intersects(BitSet bitSet) // 是否有交集 
  5. int cardinality() //返回 true/1 的個(gè)數(shù) 
  6. void clear() // 重置 
  7. void clear(int startIndex, int endIndex) // startIndex~endIndex 重置 
  8. int nextSetBit(int startIndex) //檢索在startIndex之后出現(xiàn)為1的第一位的索引 
  9. int nextClearBit(int startIndex) //檢索在startIndex之后出現(xiàn)為0的第一位的索引 

6.Queue(隊(duì)列)

  • Queue的概念 隊(duì)列是一種特殊的線性表,只允許元素從隊(duì)列一端入隊(duì),而另一端出隊(duì)(獲取元素),就像我們平時(shí)排隊(duì)結(jié)算一樣(懂文明講禮貌不插隊(duì))。Queue 的數(shù)據(jù)結(jié)構(gòu)和 List 一樣,可以基于數(shù)組,鏈表實(shí)現(xiàn),隊(duì)列通常都是一端進(jìn)(offer),另一端出(poll),有序性

PriorityQueue

  • PriorityQueue是按優(yōu)先級(jí)排序的隊(duì)列,也就是說(shuō) vip 可以插隊(duì)。優(yōu)先隊(duì)列要求使用 Java Comparable 和 Comparator 接口給對(duì)象排序,并且在排序時(shí)會(huì)按照優(yōu)先級(jí)處理其中的元素
  • PriorityBlockingQueue 是線程安全的PriorityQueue

BlockingQueue

  • BlockingQueue很好的解決了多線程中,如何高效安全“傳輸”數(shù)據(jù)的問(wèn)題。通過(guò)這些高效并且線程安全的隊(duì)列類(lèi),為我們快速搭建高質(zhì)量的多線程程序帶來(lái)極大的便利。常用于線程的任務(wù)隊(duì)列

DelayQueue

  • DelayQueue是一個(gè)沒(méi)有邊界BlockingQueue實(shí)現(xiàn),加入元素必須實(shí)現(xiàn)Delayed接口。當(dāng)生產(chǎn)者線程調(diào)用put之類(lèi)的方法加入元素時(shí),會(huì)觸發(fā) Delayed 接口中的compareTo方法進(jìn)行排序
  • 消費(fèi)者線程查看隊(duì)列頭部的元素,注意是查看不是取出。然后調(diào)用元素的getDelay方法,如果此方法返回的值小0或者等于0,則消費(fèi)者線程會(huì)從隊(duì)列中取出此元素,并進(jìn)行處理。如果getDelay方法返回的值大于0,則消費(fèi)者線程阻塞到第一元素過(guò)期

Queue 的 API

  1. boolean add(E e); //加入隊(duì)列尾部 
  2. boolean offer(E e); // 加入隊(duì)列尾部,并返回結(jié)果 
  3. E remove(); //移除頭部元素 
  4. E poll();  // 獲取頭部元素,并移除 
  5. E element(); // 獲取頭部元素,不存在則報(bào)錯(cuò) 
  6. E peek(); // 獲取頭部元素,不移除 

7.Deque(雙向隊(duì)列)

  • Deque接口代表一個(gè)"雙端隊(duì)列",雙端隊(duì)列可以同時(shí)從兩端來(lái)添加、刪除元素,因此Deque的實(shí)現(xiàn)類(lèi)既可以當(dāng)成隊(duì)列使用、也可以當(dāng)成棧使用
  • Deque 的子類(lèi) LinkedList,ArrayDeque,LinkedBlockingDeque

Deque的 API

  1. void addFirst(E e); //加入頭部 
  2. void addLast(E e);  //加入尾部 
  3. boolean offerFirst(E e); //加入頭部,并返回結(jié)果 
  4. boolean offerLast(E e); //加入尾部,并返回結(jié)果 
  5. E removeFirst(); // 移除第一個(gè)元素 
  6. E removeLast(); // 移除最后一個(gè)元素 
  7. E getFirst(); //獲取第一個(gè)元素,不存在則報(bào)錯(cuò) 
  8. E getLast();  //獲取最后一個(gè)元素,不存在則報(bào)錯(cuò) 
  9. E pollFirst(); //獲取第一個(gè)元素,并移除 
  10. E pollLast(); //獲取最后一個(gè)元素,并移除 
  11. E peekFirst(); //獲取第一個(gè)元素 
  12. E peekLast(); // 獲取最后一個(gè)元素 
  13. void push(E e); //加入頭部 
  14. E pop(); //彈出頭部元素 

參考文章 

java集合超詳解

 

責(zé)任編輯:武曉燕 來(lái)源: 潛行前行
相關(guān)推薦

2021-05-17 07:36:54

ArrayBlocki面試集合

2021-06-28 07:44:11

面試 DelayQueue任務(wù)調(diào)度

2021-05-23 16:03:42

LinkedBlock面試阻塞隊(duì)列

2021-05-29 12:24:29

Synchronous公平模式

2021-06-02 21:31:39

Synchronous非公平模式

2020-11-16 10:19:33

Java

2018-08-21 13:25:01

編程語(yǔ)言Java面試題

2018-04-19 14:11:50

2020-07-28 08:59:22

JavahreadLocal面試

2012-11-05 10:01:32

2012-08-09 10:02:08

面試Google

2012-08-14 10:31:28

面試

2012-08-21 09:20:57

Yahoo

2020-11-13 07:22:46

Java基礎(chǔ)While

2022-01-27 09:35:45

whiledo-while循環(huán)Java基礎(chǔ)

2022-03-28 09:31:58

for循環(huán)語(yǔ)句

2020-10-20 10:17:20

Java泛型Type

2018-04-17 16:29:24

Java面試HTTP

2018-04-02 08:28:45

Java面試存儲(chǔ)

2015-05-11 14:02:21

JavaJava集合面試問(wèn)題答案
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲影音先锋| 色综合久久久| 久久亚洲精华国产精华液| 2019中文字幕在线| 中文字幕一区二区人妻在线不卡| 97人人在线视频| 91丨porny丨国产| 国产97色在线| 国产激情av在线| 日韩在线电影| 亚洲激情图片小说视频| 国产高清自拍一区| 亚洲成人第一网站| 欧美岛国激情| 精品日韩欧美在线| 国产成人久久婷婷精品流白浆| 美女欧美视频在线观看免费 | 2024最新电影免费在线观看| 高清在线不卡av| 欧美一区二区三区…… | 日韩欧美亚洲国产| 亚洲专区视频| 欧美精品v日韩精品v韩国精品v| 日韩视频 中文字幕| 天天干天天爽天天操| 久久久久久色| 久久亚洲精品网站| www.久久国产| 国产欧美视频在线| 欧美性xxxxx极品娇小| 宅男一区二区三区| 丝袜+亚洲+另类+欧美+变态| 日韩电影在线观看网站| 欧美第一黄色网| 久久久久久久毛片| 99精品国产一区二区三区2021 | 微拍福利一区二区| 亚洲精品在线播放| 在线精品视频免费观看| 久久人妻无码一区二区| 成人在线观看免费| 99视频在线精品| 91老司机精品视频| 日本一本在线观看| 亚洲国产激情| 久久国产精品久久久久久| 少妇久久久久久久久久| 日韩欧美一级| 欧美性xxxxxx少妇| 黄色一级片播放| 亚洲妇熟xxxx妇色黄| 国产精品色在线| 久久久水蜜桃| 亚洲精品视频专区| 精品一区中文字幕| 国产精品女主播| 91porny在线| 国产中文一区| 欧美精品在线免费| 男人晚上看的视频| 精品国精品国产自在久国产应用| 欧美一卡二卡三卡| 亚洲18在线看污www麻豆| 天天免费亚洲黑人免费| 精品国产电影一区| 很污的网站在线观看| 毛片在线不卡| 亚洲欧洲另类国产综合| 日本高清一区| 黄色在线观看网| 久久久噜噜噜久久人人看 | 26uuu成人网| 91免费精品| 最新日韩中文字幕| 中文人妻一区二区三区| 国内精品免费| 亚洲精品福利在线观看| 国产麻豆剧传媒精品国产av| 在线观看视频一区二区三区| 91.com视频| 九九热视频免费| 日韩色性视频| 欧美一级片在线| 91视频福利网| 成人中文字幕视频| 亚洲国产精品小视频| 男人网站在线观看| 亚洲人成网站77777在线观看| 亚洲第一色在线| 水蜜桃av无码| 国产欧美日韩在线观看视频| 亚洲视频欧美视频| 日韩av一二区| 波多野结衣的一区二区三区| 色婷婷av一区二区三区久久| 国产美女高潮视频| 合欧美一区二区三区| 午夜精品福利视频| 国产小视频在线免费观看| 欧美精品99| 久久久久久久国产精品视频| 国产精品第一页在线观看| 在线视频精品| 国产精品嫩草影院久久久| 国产日本精品视频| 99久久亚洲一区二区三区青草| 久久久www免费人成黑人精品| 欧美巨乳在线| ...av二区三区久久精品| 欧美黑人在线观看| 日本在线啊啊| 欧美蜜桃一区二区三区| 性一交一黄一片| 免费av一区| 久久在精品线影院精品国产| 九九热国产视频| 久久精品中文| 国产精品国语对白| 国产av一区二区三区| 大美女一区二区三区| 欧美极品视频一区二区三区| 免费日本一区二区三区视频| 亚洲一区二区三区自拍| 国产日韩一区二区在线观看| 祥仔av免费一区二区三区四区| 欧美成人午夜电影| 久久精品国产亚洲av麻豆| 国产精品久久久久久| 性色av一区二区三区| 中文字幕人妻色偷偷久久| 国产91露脸合集magnet| 亚洲国产精品久久久久婷婷老年 | 日本不卡在线视频| yy111111少妇影院日韩夜片| 日韩中文字幕综合| 国产清纯白嫩初高生在线观看91| 最近看过的日韩成人| 国内激情视频在线观看| 日本韩国一区二区| 女同性恋一区二区三区| 香蕉av一区二区| 欧美一级高清免费| 亚洲va天堂va欧美ⅴa在线| 99久久国产免费看| av不卡在线免费观看| 国产精品扒开腿做爽爽爽视频软件| 欧美一区二区在线观看| 91成人在线免费视频| 精品视频免费| 欧美亚洲视频在线看网址| 国产成年妇视频| 国产精品美女久久久久久| 国产 福利 在线| 国产精品乱战久久久| 久久精品成人动漫| 中文天堂在线资源| 久久女同精品一区二区| 人妻少妇精品久久| 亚州一区二区| 有码中文亚洲精品| 久久精品久久久久久久| 91香蕉视频黄| 国产资源在线视频| 国产精品色在线网站| 久热精品在线视频| 在线观看国产小视频| 日韩中文字幕高清在线观看| 99精品在线| 日韩欧美成人一区二区| 亚洲精品永久www嫩草| 大桥未久在线视频| 精品国产乱码久久久久久浪潮| 中文字幕免费在线看线人动作大片| 亚洲欧美高清| 久久国产日韩欧美| 无遮挡在线观看| 日韩激情视频在线播放| 国产一级在线视频| 不卡的av中国片| 啊啊啊一区二区| 窝窝社区一区二区| 欧美在线观看视频| 欧美另类自拍| 色94色欧美sute亚洲线路二| 一级国产黄色片| 天堂资源在线中文精品| 久久青青草原一区二区| 欧美理论影院| 在线观看久久av| 96日本xxxxxⅹxxx17| 亚洲少妇最新在线视频| 天天操天天爱天天爽| 日韩一区二区在线免费| 成人激情春色网| 人人超在线公开视频| 亚洲国产成人一区| 国产精品国产三级国产专区52| 国产无一区二区| 国产aaa一级片| 激情综合网五月| 国产在线播放不卡| av免费在线观| 亚洲国产成人精品久久久国产成人一区 | 无码一区二区三区在线观看| 国产成人精品免费| 一卡二卡三卡视频| 神马影视一区二区| 91麻豆国产精品| 国产福利在线| 日韩欧美国产麻豆| 日本少妇做爰全过程毛片| 久久综合99re88久久爱| 国产精品嫩草影院8vv8| 欧美日韩一视频区二区| 国产精品免费在线| 欧美大胆性生话| 欧美剧在线观看| 黄色在线观看网| 欧美videos中文字幕| 老熟妇一区二区三区| 亚洲精品成人少妇| 亚洲最大成人网站| 国产精品99久久久| 国产精品免费成人| 好看的日韩av电影| 亚洲欧美日韩精品综合在线观看| 超碰成人福利| 国产欧美日韩中文字幕在线| 日本片在线观看| 中文字幕不卡av| 四虎永久在线观看| 欧美一区二区三区日韩| 国产真实乱偷精品视频| 国产精品不卡一区| 三级网站在线免费观看| 国产激情一区二区三区| 一道本在线免费视频| 一本色道久久综合亚洲精品高清| 日韩在线国产| 嫩草国产精品入口| 超碰在线97av| 在线成人免费| 国产精品扒开腿做爽爽爽的视频| 色影院视频在线| 亚洲成人网av| 国产成人精品一区二三区四区五区| 亚洲国产视频直播| av成人免费网站| 国产精品久久久久久久久图文区| 国产肉体xxxx裸体784大胆| 久久狠狠亚洲综合| 国产一区视频免费观看| 一区二区三区高清视频在线观看| 国产性生活免费视频| 国产精品久久久久蜜臀| 视频一区视频二区视频三区视频四区国产 | 日韩影院一区| 精品久久中文| 久久riav二区三区| 麻豆精品少妇| 国产精品区一区二区三在线播放| 亚洲四虎影院| 国产精品精品久久久久久| 欧美人与牲禽动交com| 久久精品在线播放| 麻豆系列在线观看| 久久精品国产91精品亚洲| 北岛玲一区二区三区| 亚洲人成电影网| 亚洲AV成人无码一二三区在线| 91精品国产综合久久福利软件| 亚洲欧美一二三区| 欧美日韩视频在线| 欧美黑人一区二区| 色综合天天综合给合国产| 久久青青草原亚洲av无码麻豆| 精品毛片三在线观看| 日韩伦理在线视频| 狠狠躁夜夜躁人人爽天天天天97 | 中文字幕在线观看一区| 人与动物性xxxx| 亚洲色大成网站www久久九九| www.5588.com毛片| 亚洲国产欧美一区二区三区丁香婷| 男女免费视频网站| 亚洲国产毛片aaaaa无费看 | 亚洲最新视频在线观看| 麻豆疯狂做受xxxx高潮视频| 亚洲高清中文字幕| 在线天堂中文字幕| 欧美最猛性xxxxx直播| 亚洲综合免费视频| 欧美岛国在线观看| 国产91绿帽单男绿奴| 亚洲天堂男人天堂女人天堂| 成人精品一区| 日韩在线观看高清| 丁香花在线影院| 国产激情综合五月久久| 91麻豆精品国产综合久久久 | 免费成人av电影| 中文字幕久久久av一区| 91精选在线| 久久久久久久久久久久久久久久久久av| 18aaaa精品欧美大片h| 国产高清在线不卡| 日本成人精品| 免费国产一区| 一本精品一区二区三区| 日本a视频在线观看| 日本成人中文字幕在线视频| 亚洲综合伊人久久| 久久综合丝袜日本网| 欧美美女性生活视频| 亚洲午夜精品17c| 中文字幕日日夜夜| 亚洲国模精品一区| 亚洲免费视频一区二区三区| 色综合天天狠天天透天天伊人| 2021中文字幕在线| 成人精品在线观看| 日韩欧美国产大片| 蜜桃视频一区二区在线观看| 久久一日本道色综合久久| 九色91porny| 国产喷白浆一区二区三区| 久久国产精品二区| 欧美日韩一区精品| 日韩在线免费看| 欧美国产日韩一区二区三区| 日日夜夜天天综合| 电影午夜精品一区二区三区| 成人黄色av| 岳毛多又紧做起爽| 国产高清在线观看免费不卡| jizz中文字幕| 欧美性猛交xxxx黑人| 精品国产av鲁一鲁一区| 色婷婷综合久久久久中文字幕1| 小h片在线观看| 99久久久精品免费观看国产| jvid福利在线一区二区| 逼特逼视频在线| 国产乱人伦精品一区二区在线观看 | 你懂的在线免费观看| 精品中文字幕在线观看| 91精品国产66| 欧美高清性xxxxhd| 热99这里只有精品| 久久久一二三| 欧洲女同同性吃奶| 黑人巨大精品欧美一区二区一视频| 免费看黄网站在线观看| 午夜伦理精品一区| 伊人久久大香线蕉| 九热视频在线观看| 国产精品嫩草久久久久| 国产又粗又长又黄| 久久久精品国产| 午夜久久av| 六月丁香婷婷激情| 国产欧美日韩三区| 91麻豆成人精品国产| 久久成人精品电影| 9l视频自拍蝌蚪9l视频成人| 成人网站免费观看入口| 91在线精品秘密一区二区| 成人h动漫精品一区二区下载| 中文在线不卡视频| 日韩成人视屏| 欧美三级在线观看视频| 久久久精品黄色| 91成人国产综合久久精品| 九九九久久久久久| 亚洲宅男一区| www.欧美激情.com| 亚洲大片在线观看| 男人的天堂在线免费视频| 国产日产欧美a一级在线| 欧美二区视频| 国产三级国产精品| 欧美乱熟臀69xxxxxx| 91www在线| 亚洲欧洲国产精品久久| 国产大陆精品国产| 欧美超碰在线观看| 九九视频直播综合网| 偷拍亚洲精品| 日韩精品在线播放视频| 欧美日韩日本国产| 成人日韩欧美| 欧美日韩精品久久久免费观看| 久久国产福利国产秒拍| 精品少妇一二三区| 在线播放国产一区中文字幕剧情欧美 | 午夜精品aaa| 看黄网站在线| 玛丽玛丽电影原版免费观看1977 | 欧美一区二区免费| 欧美momandson|