ArrayList
는 기존의 Vector
를 개선한 것으로 구현원리가 기능적으로 동일하다. ArrayList
와 다르게 Vector
는 자체적으로 동기화처리가 되어 있다. List 인터페이스를 구현하므로, 저장 순서가 유지되고 중복을 허용하며 Object
배열을 이용하여 데이터를 저장한다. 배열에 저장공간이 없으면 큰 새로운 배열을 자동으로 생성하고 복사하여 저장한다.
ArrayList() // 기본 생성자
ArrayList(Collection c) // 컬렉션을 ArrayList로 변환
ArrayList(int initialCapacity) // 배열의 길이를 지정하여 생성
class ArrayListEx1 {
public static void main(String[] args) {
// 기본 길이(capacity)가 10인 ArrayList 생성
ArrayList list1 = new ArrayList(10);
// ArrayList에는 객체만 저장 가능
// autoboxing에 의해 기본형이 참조형으로 자동 변환
list1.add(5); // list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
// ArrayList(Collection c)
ArrayList list2 = new ArrayList(list1.subList(1, 4));
print(list1, list2);
// Collection은 인터페이스, Collections는 클래스
Collections.sort(list1); // list1과 list2를 정렬
Collections.sort(list2); // Collections.sort(List l)
print(list1, list2);
// list1이 list2의 모든 요소를 포함하는 지 확인하는 containsAll()
System.out.println("list1.containsAll(list2):" + list1.containsAll(list2));
list2.add("B");
list2.add("C");
list2.add(3, "A"); // 추가할 위치 지정
print(list1, list2);
list2.set(3, "AA"); // 요소를 변경
print(list1, list2);
// list1에서 list2와 겹치는 부분만 남기고 나머지는 삭제
System.out.println("list1.retainAll(list2):" + list1.retainAll(list2));
print(list1, list2);
// list2에서 list1에 포함된 객체들을 삭제
for (int i = list2.size() - 1; i >= 0; i--) {
if (list1.contains(list2.get(i)))
list2.remove(i);
}
print(list1, list2);
}
static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1:" + list1);
System.out.println("list2:" + list2);
System.out.println();
}
}
list1:[5, 4, 2, 0, 1, 3]
list2:[4, 2, 0]
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4]
list1.containsAll(list2):true
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, A, B, C]
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, AA, B, C]
list1.retainAll(list2):true
list1:[0, 2, 4]
list2:[0, 2, 4, AA, B, C]
list1:[0, 2, 4]
list2:[AA, B, C]
cclass prac {
public static void main(String[] args) {
final int LIMIT = 10; // 자르고자 하는 글자의 개수를 지정
String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ";
int length = source.length();
// 크기를 약간 여유 있게 잡는다
// 크기를 지정하지 않아도 자동으로 크기가 늘어나지만 처리시간이 많이 소요된다
List list = new ArrayList(length / LIMIT);
for (int i = 0; i < length; i += LIMIT) {
if (i + LIMIT < length)
list.add(source.substring(i, i + LIMIT)); // i부터 10개씩
else
list.add(source.substring(i));
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
0123456789
abcdefghij
ABCDEFGHIJ
!@#$%^&*()
ZZZ