자료를 저장하기 위한 구조. 리스트(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