[java] ArrayList

자바ArrayListCollection Framework의 한 종류이다.

C++처럼 operator[]를 지원하면 좋으련만....

E get(int index) 라는 메소드로 첨자접근을 지원한다.

대부분의 기능은 레퍼런스 사이트에 잘 나와 있다.

http://docs.oracle.com/javase/6/docs/api/index.html?index-filesindex-1.html

1. ArrayList의 fill(C++의 std::fill)

import java.util.ArrayList;
import java.util.Collections;
/*...중략...*/
ArrayList<Integer> v;
v=new ArrayList<>(Collections.nCopies(10,4));
//10개의 배열을 생성후, 4로 초기화 함

nCopies 의 2번째 인자에 new CLASS()를 넣게되면 모든 배열이 한 객체를 가르키게된다. 이는 assign 같은 메소드가 아니다.

그래서 아래와 같이 할 수 도 있다.

class AAA{
	/*...*/
}
ArrayList<AAA> v=new ArrayList<>(Collections.nCopies(10,null));
for(int i=0;i<v.size();i++){
	v.set(i,new AAA());
}

2. Array의 fill(C++의 std::fill)

Integer[] v;
v=new Integer[10];
Arrays.fill(V,7);	//V배열 모두를 7로 채움

이진 탐색과 정렬도 Arrays 안에 속해 있다.

우선 배열자체를 할당한다, 각 원소를 한번에 할당하는 방법은 없다고 한다.

3. ArrayList의 정렬

1. 객체 안에 비교함수를 만들 경우

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;
import java.util.Random;
class AAA{
	public Integer first;
    public Integer second;
    public int compareTo(AAA a){
    	return this.first < a.first ? -1 : this.first > a.first ? 1 : 0;
    }
}
public class Main{
	public static void main(String[] args){
        ArrayList<AAA> a = new ArrayList<>(Collections.nCopies(10, null));
        Random rand = new Random();
        for(int i = 0; i < 10; i++){
        	a.set(i, new AAA());
            a.get(i).first = rand.nextInt(100);
            a.get(i).second = i * i;
        }
        Collections.sort(a, AAA::compareTo);	// 정렬 방법1
        // a.sort(AAA::compareTo);			// 정렬 방법2
        for(AAA i : a){
        	System.out.println(i.first + '\t' + i.second);
        }
    }
}
Collections.sort(인스턴스 이름, 객체 이름::비교함수);```
또는

인스턴스 이름.sort(객체 이름::비교함수);```
를 사용하면 된다.

2. 객체 밖에 비교함수를 만들 경우

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;
import java.util.Random;
class AAA{
	public Integer first;
    public Integer second;
}
class ComparatorAAA implements Comparator<AAA>{
	@Override
    public int compare(AAA a, AAA b){
    	return a.first < b.first ? -1 : a.first > b.first ? 1 : 0;
    }
}
public class Main{
	public static void main(String[] args){
        ArrayList<AAA> a = new ArrayList<>(Collections.nCopies(10, null));
        /*...*/
        Collections.sort(a, new ComparatorAAA());	// 정렬 방법1
        // a.sort(new ComparatorAAA());			// 정렬 방법2
        /*...*/
    }
}
Collections.sort(인스턴스 이름, new 비교클래스());```
또는

인스턴스 이름.sort(new 비교클래스());```
를 사용하면 된다.

4. Array의 정렬

1. 객체 안에 비교함수를 만들 경우

import java.util.Comparator;
import java.util.Collections;
import java.util.Random;
import java.util.Arrays;
class AAA{
	public Integer first;
    public Integer second;
    public int compareTo(AAA a){
    	return this.first < a.first ? -1 : this.first > a.first ? 1 : 0;
    }
}
public class Main{
	public static void main(String[] args){
        AAA[] a = new AAA[10];
        /*...*/
        Arrays.sort(a, AAA::compareTo);	// 정렬
        /*...*/
    }
}

Arrays.sort(인스턴스 이름, 객체이름::비교함수);```
를 사용하면 된다.

2. 객체 밖에 비교함수를 만들 경우

import java.util.Comparator;
import java.util.Collections;
import java.util.Random;
import java.util.Arrays;
class AAA{
	/*...*/
}
class ComparatorAAA implements Comparator<AAA>{
	@Override
    public int compare(AAA a, AAA b){
    	return a.first < b.first ? -1 : a.first > b.first ? 1 : 0;
    }
}
public class Main{
	public static void main(String[] args){
        AAA[] a = new AAA[10];
        /*...*/
        Arrays.sort(a, new ComparatorAAA());	// 정렬
		/*...*/
    }
}

Arrays.sort(인스턴스 이름, new 비교클래스());```
를 사용하면 된다.