ArrayList
, LinkedList
,Stack
등배열의 장단점
- 장점 : 배열은 구조가 간단하고 데이터를 읽는데 걸리는 시간(접근 시간,access time)이 짧다
- 단점 :
- 크기를 변경할 수 없다.
- 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야함
- 크기 변경을 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨
- 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다
- 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야 함
- 그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠르다
LinkedList
는 불연속적으로 존재하는 데이터를 연결(link)ArrayList
보다 느리다삽입/삭제
가 빠르다삽입/삭제
할 경우 그 데이터까지 순차적으로 조회해야 하기때문에 O(N)의 시간복잡도를 가진다이처럼 조회시에는
ArrayList
가 우위에 있지만,
삽입/삭제 시에는LinkedList
가 뛰어난 성능을 보여준다.소량의 데이터를 가지고 사용할 때는 사실 큰 차이가 없지만,
정적인 데이터를 활용하면서 조회가 빈번하다면ArrayList
를 사용하는 것이 좋고,
동적으로 추가/삭제 요구사항이 빈번하다면LinkedList
를 사용하는 것이 좋다.
stack
과는 달리 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공한다.LinkedList
등이 있다.HashSet
, TreeSet
등LinkedHashSet
클래스를 사용하면 된다
public class Ex {
public static void main(String[] args) {
Set<String> hashSet = new HashSet<>();
hashSet.add("하나");
hashSet.add("둘");
hashSet.add("셋");
System.out.println(hashSet);
hashSet.add("넷");
hashSet.add("다섯");
System.out.println(hashSet);
}
}
public class Ex {
public static void main(String[] args) {
Set<String> hashSet = new LinkedHashSet<>();
hashSet.add("하나");
hashSet.add("둘");
hashSet.add("셋");
System.out.println(hashSet);
hashSet.add("넷");
hashSet.add("다섯");
System.out.println(hashSet);
}
}
HashSet
보다 데이터 추가, 삭제에 시간이 더 걸린다HashMap
(LinkedHashMap : 순서가 있는 hashMap) , TreeMap
, HashTable
null
허용public class Ex {
public static void main(String[] args) {
Map<String, String> hashMap = new HashMap<>();
hashMap.put("하나", "one");
hashMap.put("둘", "two");
hashMap.put("셋", "three");
hashMap.put("셋_셋", "three"); // key는 중복X value는 중복 가능
System.out.println(hashMap);
}
}
public class Ex {
public static void main(String[] args) {
Map<String, String> hashMap = new LinkedHashMap<>();
hashMap.put("하나", "one");
hashMap.put("둘", "two");
hashMap.put("셋", "three");
hashMap.put("셋_셋", "three");
System.out.println(hashMap);
}
}