第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

JAVA優(yōu)化建議(6)

標(biāo)簽:
Java

1.在明确的场景下,为集合指定初始容量
因为在使用add、remove方法操作的话,都需要扩容
以ArrayList为例
如果是有add方法,源码如下:

 public boolean add(E e) {
 ensureCapacityInternal(size + 1);  // Increments modCount!!
 elementData[size++] = e;
 return true;
}

 private void ensureCapacityInternal(int minCapacity) {
 if (elementData == EMPTY_ELEMENTDATA) {
     minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
 }

 ensureExplicitCapacity(minCapacity);
}

private void ensureExplicitCapacity(int minCapacity) {
    modCount++;

    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
}


每执行一个add会扩一次容
如果固定长度,例如固定长度为15在15范围之内就不扩容,

 public ArrayList(int initialCapacity) {
 super();
 if (initialCapacity < 0)
     throw new IllegalArgumentException("Illegal Capacity: "+
                                        initialCapacity);
 this.elementData = new Object[initialCapacity];
}

//如果不初始化
public ArrayList() {
      super();
      this.elementData = EMPTY_ELEMENTDATA;
  }
private static final Object[] EMPTY_ELEMENTDATA = {};

2.基本数据类型作为asList的输入参数,导致不必要的逻辑错误
因为asList传入的参数是变长参数泛型,基本类型不能转化为泛型,但是数组可以

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

所以会出现如下的现象

int[] data = {1,2,3,4,5};
List list = Arrays.asList(data);
System.out.println("list 的 容量:"+list.size());
System.out.println(data.equals(list.get(0)));

打印结果如下:
list 的 容量:1
true
asLsit把数组整体放入list(0)中了
但是引用类型不会出现

Integer[] data1 = {1,2,3,4,5};
List list1 = Arrays.asList(data1);
System.out.println("list1 的 容量:"+list1.size());
System.out.println(data1.equals(list1.get(0)));

打印结果如下:
list1 的 容量:5
false

3.asArrayList产生的对象List不可更改

Integer[] data1 = {1,2,3,4,5};
List list1 = Arrays.asList(data1);
list1.add(6);

则会报错
Exception in thread “main” java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at Main.main(Main.java:49)
原因是:

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

这里的ArrayList不是java.util.ArrayList
而是他的内部类

private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
 {
     private static final long serialVersionUID = -2764017481108945198L;
     private final E[] a;

     ArrayList(E[] array) {
         if (array==null)
             throw new NullPointerException();
         a = array;
     }

父类的add方法

public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

4.可以随机存取的用for(int i=0;i<list.size();i++)例如ArrayList
不可以随机存取的用for(int i:list) 例如LinkedList

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消