자료를 저장하기 위한 구조. 리스트(list), 스택(stack), 큐(queue), 집합(set), 해쉬테이블(hash table) 등이 있다. 컬렉션은 제네릭으로 구현되어 있다.
1. 벡터(Vector)
가변 크기의 배열. 기존의 배열은 크기가 고정되어 있어 값을 변경할 수 없지만, 벡터는 자료 크기를 증가시킬 수도 있고, 어떠한 자료형도 저장할 수 있다.
public class VectorExample1 {
public static void main(String[] args) {
Vector<String> vec = new Vector<String>();
vec.add("apple");
vec.add("orange");
vec.add("mango");
System.out.println(vec);
System.out.println("벡터의 크기:" + vec.size());
Collections.sort(vec);
System.out.println(vec);
}
}
벡터의 크기를 지정하지 않아도 .add 로 값을 추가할 수 있다.
Collections.sort 를 이용해서 값을 정렬할 수 있다.

2. ArrayList
벡터와 동일하게 가변 크기의 배열을 구현할 수 있다. 차이는 벡터는 스레드 간의 동기화를 지원하지만 ArrayList 는 동기화를 지원하지 않는다. 따라서 멀티 스레드를 이용할 상황일 때는 벡터, 단일 스레드를 이용할 때는 ArrayList 를 이용하는 것이 좋다.
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("mango");
list.add("pear");
System.out.println(list);
int index1 = list.indexOf("mango");
System.out.println("망고의 위치:" + index1);
list.add(1, "grape");
System.out.println(list);
int index2 = list.indexOf("mango");
System.out.println("망고의 위치:" + index2);
}
}
indexOf 는 해당 문자열의 인덱스를 찾는 메서드다.
add(인덱스, 값) 을 입력하면 값을 추가할 수 있다.

3. LinkedList
ArrayList 는 데이터를 삽입하면 해당 인덱스에 값이 추가되고 다른 값들은 하나씩 뒤로 밀리게 된다.
반면 LinkedList 를 이용하면 값의 교체를 할 수 있다.
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("apple");
list.add("banana");
list.add("mango");
list.add("pear");
System.out.println(list);
list.add(1, "orange");
list.set(0, "grape");
list.remove(3);
System.out.println(list);
}
}

.set을 사용해서 값을 교체할 수 있다.
.remove 는 인덱스값을 제거하는 메서드다.
4. 집합(Set)
순서에 상관없이 값을 저장하고 싶을 때 사용한다. set 은 데이터의 중복을 막도록 설계되어 있다.
[HashSet]
public class SetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("milk");
set.add("bread");
set.add("butter");
set.add("cheese");
set.add("ham");
set.add("butter");
System.out.println("집합의 수:" + set.size());
System.out.println(set);
}
}

값을 추가할 때 butter가 두 번 추가 되었지만 값은 하나만 추가되었다.
HashSet 은 랜덤으로 저장된다.
set 에는 HashSet , TreeSet, LinkedHashSet 3가지가 있다. HashSet 은 해쉬 테이블에 값을 저장하기 때문에 성능 면에서 가장 우수하다. 하지만 원소들의 순서가 일정하지 않다. LinkedHashSet 은 입력받은 순서대로 저장되며, TreeSet은 정렬 상태로 저장된다.
[LinkedHashSet]
public class SetTest {
public static void main(String[] args) {
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("milk");
set.add("bread");
set.add("butter");
set.add("cheese");
set.add("ham");
set.add("butter");
System.out.println("집합의 수:" + set.size());
System.out.println(set);
}
}

LinkedHashSet 은 입력 받은 순서대로 저장된다.
[TreeSet]
public class SetTest {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
set.add("milk");
set.add("bread");
set.add("butter");
set.add("cheese");
set.add("ham");
set.add("butter");
System.out.println("집합의 수:" + set.size());
System.out.println(set);
}
}

TreeSet 은 정렬 상태로 저장된다.
Share article