내배캠 강의중 Array와 collection 부분에서 중요하다고 생각되는 특징과 기능을 정리
1. Array
배열 복사
얕은 복사 : 주소값만 복사되고 실제값은 1개로 유지되는걸 얕은 복사라고 한다.
깊은 복사 : 얕은 복사처럼 가짜 복사가 아니라 진짜 새로운 배열을 똑같이 만들고 싶을때 깊은 복사를 한다.
배열 복사 메서드
.clone() 메서드: 1차원 배열에서는 깊은복사로 동작 clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작
Arrays.copyOf() 메서드
2. List
1-1 ArrayList
특징
생성 시점에 작은 연소된 공간을 요청해서 참조형 변수들을 담아놓는다.
값이 추가될 때 공간이 필요하면 더 큰 공간을 받아서 저장하니깐 상관없다.
기능
- 선언 : ArrayList<Integer> intList 형태로 선언 ArrayList<Integer> intList = new ArrayList<Integer>();
- 생성 : new ArrayList<Integer>(); 형태로 생성
- 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없다.
- 값 추가 : intList.add({추가할 값}) 형태로 값을 추가
- 값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정
- 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제
- 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력
- 전체 제거 : intList.clear() 형태로 전체 값을 삭제
1-2 LinkedList
특징
기본적인 기능은 ArrayList와 동일 하지만 LinkedList는 값을 나누어 담기 때문에 모든값을 조회하는 속도가 느리다.
대신 값을 중간에 추가하거나 삭제할때는 속도가 빠름
기능
- 선언 : ArrayList<Integer> intList 형태로 선언
- 생성 : new ArrayList<Integer>(); 형태로 생성
- 선언 및 생성: ArrayList<Integer> intList = new ArrayList<Integer>();
- 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없다
- 값 추가 : intList.add({추가할 값}) 형태로 값을 추가
- 값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정
- 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제
- 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력
- 전체 제거 : intList.clear() 형태로 전체 값을 삭제
3. stack
특징
상자에 물건을 넣고 빼는것처럼 밑에서 위로 쌓고, 꺼낼때는 위에서 부터 꺼내는 형식
기능
- 선언 : Stack<Integer> intStack 형태로 선언 Stack<Integer> intStack = new Stack<Integer>();
- 생성 : new Stack<Integer>(); 형태로 생성
- 선언 및 생성: Stack intStack = new Stack();
- 추가 : intStack.push({추가할 값}) 형태로 값을 추가
- 조회 : intStack.peek() 형태로 맨 위값을 조회
- 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고나면 삭제됨)
4. Queue
특징
First In First Out : 먼저들어간 순서대로 값을 조회
기능
- 선언 : Queue<Integer> intQueue 형태로 선언
- 생성 : new LinkedList<Integer>(); 형태로 생성
- 선언 및 생성: Queue intQueue = new LinkedList<>();
- 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가
- 조회 : intQueue.peek() 형태로 맨 아래값을 조회
- 꺼내기 : intQueue.poll() 형태로 맨 아래값을 꺼냅 (꺼내고나면 삭제됨)
5. Set
특징
순서가 보장되지 않는 대신 중복을 허용하지 않도록 유지할 수 있다.
기능
- 선언 : Set<Integer> intSet 형태로 선언
- 생성 : new HashSet<Integer>(); 형태로 생성
- 선언 및 생성: Set intSet = new HashSet();
- 추가 : intSet.add({추가할 값}) 형태로 값을 맨 위에 추가
- 조회 : intSet.get({초회할 순번}) 형태로 순번에 있는 값을 조회
- 삭제 : intSet.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정
- 포함확인 : intSet.contains({포함확인 할 값}) 형태로 해당값이 포함되어있는지 boolean 값으로 응답 받는다.
- TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있음
- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능, 출력시 iterator() 메서드 필요
5. Map
특징
key-value 형태로 데이터를 저장하기 때문에 기존에 순번으로만 조회하던 방식에서, key 값을 기준으로 vlaue를 조회할 수 있다.
key 값 단위로 중복을 허용하지 않는 기능을 가지고 있다.
기능
- 선언 : Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정해서 선언
- 생성 : new HashMap<>(); 형태로 생성
- 선언 및 생성: HashMap<String, Integer> intMap = new HashMap<>();
- 추가 : intMap.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가
- 조회 : intMap.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회
- 전체 key 조회 : intMap.keySet() 형태로 전체 key 값들을 조회
- 전체 value 조회 : intMap.values() 형태로 전체 value 값들을 조회
- 삭제 : intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제
- TreeMap : key 값을 기준으로 정렬을 할 수 있습니다. 다만, 저장시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림