yuyee

          PriorityBlockingQueue

          PriorityBlockingQueue:一個(gè)無(wú)界的阻塞隊(duì)列,它使用與類 PriorityQueue 相同的順序規(guī)則,并且提供了阻塞檢索的操作。雖然此隊(duì)列邏輯上是無(wú)界的,但是由于資源被耗盡,所以試圖執(zhí)行添加操作可能會(huì)失敗(導(dǎo)致 OutOfMemoryError)。此類不允許使用 null 元素。依賴自然順序的優(yōu)先級(jí)隊(duì)列也不允許插入不可比較的對(duì)象(因?yàn)檫@樣做會(huì)拋出 ClassCastException)。

           PriorityBlockingQueue()

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

          此類每次offer元素,都會(huì)有一個(gè)fixup操作,也就是排序,如果沒(méi)有構(gòu)造的時(shí)候傳入自己實(shí)現(xiàn)的比較器,就采用自然排序,否則采用比較器規(guī)則,進(jìn)行二分查找,比較,保持列頭是比較器希望的那個(gè)最大或則最小元素。
           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) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永仁县| 江西省| 辉县市| 东阿县| 青铜峡市| 通江县| 陇南市| 乌拉特中旗| 太白县| 临夏县| 视频| 禄劝| 容城县| 兴隆县| 宁国市| 土默特左旗| 图木舒克市| 西充县| 贵州省| 兰考县| 苏尼特左旗| 淮北市| 甘泉县| 新郑市| 兴业县| 荥经县| 鹿泉市| 于都县| 昌宁县| 涡阳县| 平邑县| 湾仔区| 嘉峪关市| 郧西县| 铜川市| 平凉市| 邢台县| 凉山| 丰宁| 清苑县| 汉阴县|