Going my way

いいなと思ったことをメモしていきます。

Javaコレクションのまとめ


Advertisements


package forBlog;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class SampleList {
	public static void main(String[] args){
		
		//コレクションの要素の型には参照型を指定する。基本型は指定できない!
		List<Integer> list = new ArrayList<Integer>();
		
		for(int i=10; i>0;i--){
			list.add(i);
		}
		
		//リストの要素を取り出す
		for(int i=0; i<list.size();i++){
			System.out.println("list.size():"+ list.get(i));
		}
		
		//リストの要素を取り出す
		for(int i: list){
			System.out.println("拡張型for文:"+i);
		}
		
		//イテレーション
		for(Iterator<Integer> it = list.iterator();it.hasNext();){
			Integer n = it.next();
			System.out.println("Iterator:"+n);
		}
		
		
		//リストの要素の検索
		//ソートしてからじゃないと検索できない
		Collections.sort(list);
		for(int i: list){
			System.out.println(i);
		}
		
		
		int found_index = Collections.binarySearch(list,5,null);
		System.out.println("該当のインデックスは:"+found_index);
		
		//見つからない場合
		int not_found_index = Collections.binarySearch(list,20,null);
		System.out.println("見つからない:"+not_found_index);
		
		
		
	}
}


イテレータとは
繰り返し処理を抽象化したオブジェクトのこと。

Iteratorインターフェースがもつ3つのメソッド
boolean hasNext(); 次に取り出す要素があるか調べる
E next();  まだ取り出していない次の要素を取り出す
void remove();  nextで取り出した要素をコレクションから削除する

以下の例を見てみる

		//イテレーション
		for(Iterator<Integer> it = list.iterator();it.hasNext();){
			Integer n = it.next();
			System.out.println("Iterator:"+n);
		}

it.hasNext()で次の要素があればtrueとなって、for文を継続する。
it.nextで、次の要素を取り出す



拡張型for文と従来型for文

		//リストの要素を取り出す
		for(int i=0; i<list.size();i++){
			System.out.println("list.size():"+ list.get(i));
		}
		
		//リストの要素を取り出す
		for(int i: list){
			System.out.println("拡張型for文:"+i);
		}

どっちも同じことである。
順番に要素を取り出している。


要素をソートする

		Collections.sort(list);
		for(int i: list){
			System.out.println(i);
		}

検索前には必ずソートが必要なので注意。
こうすると辞書順、数字順に並べ替えられる。

		int found_index = Collections.binarySearch(list,5,null);
		System.out.println("該当のインデックスは:"+found_index);
		
		//見つからない場合
		int not_found_index = Collections.binarySearch(list,20,null);
		System.out.println("見つからない:"+not_found_index);

イナリサーチを使えば、探している要素のインデックスを取得できる。


一番上のソースを実行した結果は以下の通り

list.size():10
list.size():9
list.size():8
list.size():7
list.size():6
list.size():5
list.size():4
list.size():3
list.size():2
list.size():1
拡張型for文:10
拡張型for文:9
拡張型for文:8
拡張型for文:7
拡張型for文:6
拡張型for文:5
拡張型for文:4
拡張型for文:3
拡張型for文:2
拡張型for文:1
Iterator:10
Iterator:9
Iterator:8
Iterator:7
Iterator:6
Iterator:5
Iterator:4
Iterator:3
Iterator:2
Iterator:1
1
2
3
4
5
6
7
8
9
10
該当のインデックスは:4
見つからない:-11