33 */
44class MaxHeap <E extends Comparable <E >>{
55
6- List ? data ;
6+ List ? _data ;
77
88 MaxHeap .withCapacity (int capacity){
9- data = List .filled (capacity, E , growable: true );
9+ _data = List .filled (capacity, E , growable: true );
1010 }
1111
1212 MaxHeap .withEmpty (){
13- data = List .empty (growable: true );
13+ _data = List .empty (growable: true );
1414 }
1515
1616 // 返回堆中的元素个数
1717 int ? size (){
18- return data ! .length;
18+ return _data ! .length;
1919 }
2020
2121 // 返回一个布尔值, 表示堆中是否为空
2222 bool isEmpty (){
23- return data ! .isEmpty;
23+ return _data ! .isEmpty;
2424 }
2525
2626 int _parent (int index){
@@ -42,42 +42,42 @@ class MaxHeap<E extends Comparable<E>>{
4242
4343 // 向堆中添加元素
4444 add (E e){
45- data ! .add (e);
46- siftUp (data ! .length - 1 );
45+ _data ! .add (e);
46+ siftUp (_data ! .length - 1 );
4747 }
4848
4949 siftUp (int k){
50- while (k > 0 && data ! [_parent (k)].compareTo (data ! [k]) < 0 ){
50+ while (k > 0 && _data ! [_parent (k)].compareTo (_data ! [k]) < 0 ){
5151 _swap (k, _parent (k));
5252 k = _parent (k);
5353 }
5454 }
5555
5656 // 看堆中的最大元素
5757 E findMax (){
58- if (data ! .length == 0 )
58+ if (_data ! .length == 0 )
5959 throw new Exception ("Can not findMax when heap is empty." );
60- return data ! [0 ];
60+ return _data ! [0 ];
6161 }
6262
6363 // 取出堆中最大元素
6464 E extractMax (){
6565 E ret = findMax ();
66- _swap (0 , data ! .length - 1 );
67- data ! .removeLast ();
66+ _swap (0 , _data ! .length - 1 );
67+ _data ! .removeLast ();
6868 _siftDown (0 );
6969
7070 return ret;
7171 }
7272
7373 _siftDown (int k){
74- while (_leftChild (k) < data ! .length){
75- int j = _leftChild (k); // 在此轮循环中,data [k]和data[j]交换位置
76- if ( j + 1 < data ! .length &&
77- data ! [j+ 1 ].compareTo (data ! [j]) > 0 )
74+ while (_leftChild (k) < _data ! .length){
75+ int j = _leftChild (k); // 在此轮循环中,_data [k]和data[j]交换位置
76+ if ( j + 1 < _data ! .length &&
77+ _data ! [j+ 1 ].compareTo (_data ! [j]) > 0 )
7878 j ++ ;
79- // data [j] 是 leftChild 和 rightChild 中的最大值
80- if (data ! [k].compareTo (data ! [j]) >= 0 )
79+ // _data [j] 是 leftChild 和 rightChild 中的最大值
80+ if (_data ! [k].compareTo (_data ! [j]) >= 0 )
8181 break ;
8282 _swap (k, j);
8383 k = j;
@@ -88,18 +88,18 @@ class MaxHeap<E extends Comparable<E>>{
8888 E replace (E e){
8989
9090 E ret = findMax ();
91- data ! [0 ] = e;;
91+ _data ! [0 ] = e;;
9292 _siftDown (0 );
9393 return ret;
9494 }
9595
9696 _swap (int i, int j){
97- if (i < 0 || i >= data ! .length || j < 0 || j >= data ! .length)
97+ if (i < 0 || i >= _data ! .length || j < 0 || j >= _data ! .length)
9898 throw new Exception ("Index is illegal." );
9999
100- E t = data ! [i];
101- data ! [i] = data ! [j];
102- data ! [j] = t;
100+ E t = _data ! [i];
101+ _data ! [i] = _data ! [j];
102+ _data ! [j] = t;
103103 }
104104
105105}
0 commit comments