yuyee

          PriorityBlockingQueue

          PriorityBlockingQueue:一個無界的阻塞隊列,它使用與類 PriorityQueue 相同的順序規則,并且提供了阻塞檢索的操作。雖然此隊列邏輯上是無界的,但是由于資源被耗盡,所以試圖執行添加操作可能會失敗(導致 OutOfMemoryError)。此類不允許使用 null 元素。依賴自然順序的優先級隊列也不允許插入不可比較的對象(因為這樣做會拋出 ClassCastException)。

           PriorityBlockingQueue()

                    用默認的初始容量 (11) 創建一個 PriorityBlockingQueue,并根據元素的自然順序排序其元素(使用 Comparable)。 PriorityBlockingQueue(Collection<? extends E> c)
                    創建一個包含指定集合中元素的 PriorityBlockingQueuePriorityBlockingQueue(int initialCapacity)
                    使用指定的初始容量創建一個 PriorityBlockingQueue,并根據元素的自然順序排序其元素(使用 Comparable)。 PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
                    使用指定的初始容量創建一個 PriorityBlockingQueue,并根據指定的比較器排序其元素。

          此類每次offer元素,都會有一個fixup操作,也就是排序,如果沒有構造的時候傳入自己實現的比較器,就采用自然排序,否則采用比較器規則,進行二分查找,比較,保持列頭是比較器希望的那個最大或則最小元素。
           private void fixUp(int k) {
                  if (comparator == null) {
                      while (k > 1) {
                          int j = k >> 1;
                          if (((Comparable<E>)queue[j]).compareTo((E)queue[k]) <= 0)
                              break;
                          Object tmp = queue[j];  queue[j] = queue[k]; queue[k] = tmp;
                          k = j;
                      }
                  } else {
                      while (k > 1) {
                          int j = k >>> 1;
                          if (comparator.compare((E)queue[j], (E)queue[k]) <= 0)
                              break;
                          Object tmp = queue[j];  queue[j] = queue[k]; queue[k] = tmp;
                          k = j;
                      }
                  }
              }

          posted on 2010-11-01 16:33 羔羊 閱讀(885) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 濉溪县| 芦溪县| 宝坻区| 惠州市| 武宁县| 斗六市| 九江市| 西昌市| 定兴县| 阜平县| 五华县| 壤塘县| 云阳县| 新津县| 泸溪县| 南宁市| 浏阳市| 双牌县| 临沭县| 涡阳县| 丹阳市| 东乡| 仁布县| 尼玛县| 昌邑市| 沙田区| 达州市| 泗阳县| 华蓥市| 卢龙县| 冕宁县| 乡宁县| 泌阳县| 梅河口市| 固原市| 南京市| 东至县| 荣成市| 乌鲁木齐县| 东兴市| 沅陵县|