之前公司領導說的程序員應該持用工匠精神,做爲一個程序員應該時刻的嚴格要求本身,對代碼精雕細琢,因此這片博客將會對我以往的code作出總結,總結java 代碼調優與程序員平常工做相關的代碼應該怎樣寫,若有不足歡迎指正,此篇博客會不斷更新java
1.for遍歷操做的調優git
fori:經過下標訪問程序員
foreach:是經過容器的itrator的next() 方法迭代。github
迭代器:bash
三方面調優:ui
(1)fori 可預設設置 list 的大小 list.ensureCapacity(N); 提升添加新元 素的速度this
(2)遍歷時設置提早設置list.size(), for(int i = 0,size = list.size(); i < size ; i ++){}防止每次檢測大小,效率大大提升,對集合遍歷操做特別適用spa
(3)遍歷arrayList 最好用fori .迭代器訪問LinkedList 最好 ,由於LinkedList 進行隨機訪問時,只會進行一次列表訪問;對於foreach 須要作同步檢查,因此必然比fori 慢code
fori && foreach從源碼的角度分析ci
public E get(int index) {
if (index < 0 || index >= this.size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
if(ArrayList.this.modCount != this.modCount)
throw new ConcurrentModificationException();
return (E) ArrayList.this.elementData[offset + index];
}
public E next() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
int i = cursor;
if (i >= limit) throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException(); cursor = i + 1;
return (E) elementData[lastRet = i];
}
複製代碼
實驗結果以下:
tListFori = 629 //arrayList
tListEeach = 784 // arrayList
tListFori = 134932 //linkedList
tLinkForeach = 500 //linkedList
複製代碼