Java 프레임웍 전체 복습! (1)
컬렉션 프레임워크를 이번주에 내내배웠었다. 오늘 한번 전체적으로 쫙복습하는날
컬렉션 프레임워크는 말그대로 데이터들을 저장하는 클래스들을 표준화시켜서 설계해놓은 프레임워크라고생각하면된다.
jdk1.2버전 이후에 사용되는 핵심 프레임웍 인터페이스를 살펴보자면 List, Set, Map이 있다.
출처 : [자료구조] List, Map, Set 특징 정리 :: 코딩 공부 일지 (tistory.com)
하나씩 특징을 확인해보면 Collection에 상속되어있는 List와 Set 은 순서나 집합적인 저장 공간들이다 한마디로 데이터를 저장할때 순서에 집중할지 중복에 집중을 할지 체크하는것들이다.
1. ArrayList란
그중에서 먼저 List의 특징을 보자면 데이터가 들어가는 순서라는 개념이 존재하는 녀석이다. 그리고 중복도 허용한다는 특징을 가지고 있다. 대표적으로 JAVA에서 사용하는 Arraylist 를 예를들겠다.
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListTest3 {
public static void main(String[] args) {
ArrayList<Integer> nlist = new ArrayList<>();
nlist.add(30);
nlist.add(20);
nlist.add(10);
nlist.add(40);
for (Integer inte : nlist) {
System.out.println(inte); // 30 20 10 40 들어가는 순서대로 들어간다
}
ArrayList<Integer> alist = new ArrayList<>(nlist); //새로운 주소로 새로 선언을 할 수 도 있음
for (Integer integer : alist) {
System.out.println(integer); // 값은 동일하게 나온다 하지만 주소가 다르므로 nllist와 다름
}
System.out.println(alist.contains(nlist));
Object[] oarr = nlist.toArray();
for (Object object : oarr) {
System.out.println(object );
}
}
}
2. Linkelist란
많이 쓰이지는 않지만 개념은 알아야하는 중요한 녀석이라고하셨다. 일단 이론적으로 다가가보자
기존에 배열의 문제점 :
1. 크기변경이 불가능 -- > 크기변경이 불가능하므로 배열을 생성해서 데이터를 복사해야만한다.
2. 비순차적인 데이트의 추가 또는 삭제에 시간이 엄청걸림
이러한 단점을 보완시킨게 linklist이다. 배열은 하나의 주소값에 여러데이터가 연속적으로 존재를 하지만 링크드리스트는 불연속으로 데이터를 서로 연결을 시켜 주소를 참조시켜주끔 하는 역할이라 조금 다른구조를 가지고있다.
배열은 하나의 값을 찾아서 삭제하거나 새로운 데이터를 중간에 추가해야할 때 다른 데이터들을 복사해서 이동해야한다는 단점이 있다.
그러나 링크드 리스트는 위의 그림과 같이 하나의 참조값만 변경하면 삭제도 이루어지고 새로운 요소를 추가할때는 새로운 요소를 생성한 다음에 다음 추가하고자하는 위치의 이전요소를 참조를 새로운 요소에 대한 참조로 변경해주고 새로운 요소가 그 다음 요소를 참조하도록 변경하면 되므로 전체적으로 배열보다 처리속도가 빠르다 .
3. ArrayList vs Linklist