Listインターフェース、ArayList類とLinked List類


1.ListインターフェースはCollectionインターフェースを継承し、ArayListクラスとListインターフェースを実現しました。
  拡張方法:1.AnyType get(int index);
           2.AnyType set(int index、AnyType newValue)
           3.void add(int index、AnyType newValue);
           4.void remove(int index)
           5.ListIterator<AnyType>listIterator(int pos);前へ後ろへ巡回する
2.ArayList類とLinked List類の違い。
  ArayList:get、setは速くて、add、removeは遅くて、表の頭が削除を挿入する時に最も遅くて、全体の配列を移動します。
  Linked List:add、removeは速くて、get、setは遅くて、毎回getはすべて表の頭からO(n)を遍歴しなければなりません。
3.実例は、ArayList類とLinked List類の違いを説明する。
      {1,2,3,4,5,6,7,8}は、偶数項目を削除します。
   1.ollectionは遍歴する時addとremoveができません。そうでないとjava.util.connt Modification Exceptionに報告します。
     私たちが実現する方法は2つあります。newは新しいlistを使い、そしてoldListを巡回し、奇数addをnewListに送ります。第二の方法は、ローズマリーを使って偶数を削除します。
方法1
private List<Integer> removeEvens1(List<Integer> list) {
		List<Integer> newList = new LinkedList<Integer>();
		for(Integer i : list){
			if(i%2==1){
				newList.add(i);
			}
		}
		return newList;
	}
方法2
private List<Integer> removeEvens2(List<Integer> list) {
		Iterator<Integer> iterator = list.iterator();
		while(iterator.hasNext()){
			int nextValue = iterator.next();
			if(nextValue%2==0){
				iterator.remove();
			}
		}
		return list;
	}
  方法の一と方法の二説明:
     (1)偶数項目を除いて、Linked Aray、remove()はArayListより速いです。
     (2)方法2は、新しいnewのリストを必要とせず、直接にIntertorから偶数項目を削除することができる。
      (3)forサイクルオーバーロード、アラリスト消費時間O(n)、LinkdList消費時間O(n*n)。Itertorは遍歴しています。すべてのCollectionは時間がかかります。
    まとめ:最も効率的にLinked Listと第二の方法を使用し、時間を消費するO(n)。
     
     
4.ArayList類の最適化方法。
  ensureCapacity(int size)は、配列長を予め定義し、リストデータが大きい場合は、ensureCapacity(int size)を使用することで、配列容量を増大させて複製配列の時間を大幅に減らすことができます。
  trimToSize()は、配列の余分な空間を除去します。arrayListが決定した場合、この方法を呼び出すと、省スペース化が可能です。