亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于《算法》中JAVA動態調整數組的問題

關于《算法》中JAVA動態調整數組的問題

吃雞游戲 2018-07-08 11:06:19
    private Item[] a = (Item[]) new Object[1];     private int N = 0;     public boolean isEmpty() {         return N == 0;     }     public int size() {         return N;     }     private void resize(int max) {         Item[] temp = (Item[]) new Object[max];         for (int i = 0; i < N; i++) {             temp[i] = a[i];             a = temp;         }     }     public void push(Item item) {         //判斷當數組元素計數變量N與數組的長度相等的時候 那么將數組的長度擴充2倍         if (N == a.length) {             resize(2 * a.length);         }         a[N++] = item;     }     public Item pop() {         Item item = a[N--];         a[N] = null;         if (N > 0 && N == a.length / 4) {             resize(a.length / 2);         }         return item;     }有朋友可以幫忙解釋一下么 N > 0 && N == a.length / 4 這個條件從何而來?
查看完整描述

2 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

if (N > 0 && N == a.length / 4) 這是用來控制何時觸發 resize 的,當不停的彈出元素時,a數組中的有效元素個數會不停的減少,此時a數組的長度是不變的,
當有效元素個數 == 數組長度的4分之一時,就調整數組的長度,將其長度變為1/2

查看完整回答
反對 回復 2018-07-13
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

這是根據經驗得到的。
當數組小于1/4的時候,就很大概率它不會再擴充到1/2了,所以就縮小一半(在pop里)。
當數組大于1/2的時候,它就有很大概率會繼續擴展,那么就擴大一倍(在push里)。
這么做,是權衡了空間和時間得到的相對比較優的平衡。

查看完整回答
反對 回復 2018-07-13
  • 2 回答
  • 0 關注
  • 288 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號