💡 import java.util.*
마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO
push(Object item)
pop()
: 맨 위 객체를 삭제하고 반환peek()
: 삭제하지 않고 객체 반환empty()
: 비어있는가(T/F) if (stack.isEmpty() || stack.peek() != num) {
stack.push(num);
}
if (stack.isEmpty() || stack.peek() != num) {
stack.push(num);
}
먼저 들어간 데이터를 먼저 꺼내는 FIFO
값 리턴 | 예외 발생 | |
---|---|---|
추가 | offer(e) : false | add(e) : IllegalStateException |
제거하고 반환 | poll() : null | remove() : NoSuchElementException |
값 읽어오기 | peek() : null | element() : NoSuchElementException |
size()
: 큐의 원소 개수를 반환합니다.isEmpty()
: 큐가 비어있는지 여부를 확인합니다.clear()
: 큐의 모든 원소를 제거하여 비웁니다.toArray()
: 큐의 모든 원소를 배열로 반환합니다.<- new ArrayList() : 기본 크기가 10인 배열 생성
- new ArrayList(기본크기) : 기본 크기를 지정 (배열이 다 차면 기본크기만큼 사이즈가 증가함)
- new ArrayList<제네릭>() : 배열 값의 타입을 지정
제네릭 (Generic)
- 컬렉션 객체를 생성할 때 저장되는 데이터의 타입을 미리 지정하는 기능
- 제네릭으로 지정한 타입 외에는 담길 수 없도록 함
- .add((index), val) : 삽입
- .get(index) : 인덱스의 값 반환
- .set(index, val) : 값 변경
- .remove(index or val) : 삭제
- 해당 인덱스의 값 or 해당 값 중 첫번째 값 삭제
- .toArray() : 일반 배열 타입으로 반환
- 저장할 배열 타입에 맞춰 자동 형변환
- 배열 크기 또한 자동으로 맞춰서 바꿔줌
- .isEmpty(): 비었으면 true, 하나라도 값이 있으면 false 반환
- .size(): 요소 개수 반환
- .indexOf(val): 값을 제공하면 해당 값의 첫번째 인덱스를 반환
- .lastindexOf(val): 해당 값의 마지막 인덱스 반환
- .contains(val): 해당 값이 배열에 있는지 검색해서 true / false 반환
- .containsAll(val1, val2...): argument로 제공한 컬렉션의 모든 값이 포함되어 있는지 여부를 true / false로 반환
- .clear(): 값 모두 삭제
- .addAll(arr2): 두 컬렉션을 합침
- .retainAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값을 제외하고 모두 지워줌
- .removeAll(arr2): argument로 제공한 컬렉션 내에 들어있는 값과 일치하는 값을 모두 지워줌, retainAll() 메소드와 반대
💡 해당 방법은 배열/리스트에서 순서관계 없이 중복된 요소를 제거하고 하나로 구성하는 방법입니다.
int[] arr = {1, 2, 3, 3, 4, 4, 5};
arr = Arrays.stream(arr).distinct().toArray(); // [1, 2, 3, 4, 5]
int[] arr = {1, 1, 3, 3, 0, 1, 1, 3, 3, 3, 8};
int[] newArr = Arrays.stream(arr).distinct().toArray(); // [1, 3, 0, 8]
int[] arr = {1, 2, 3, 3, 4, 4, 5};
/// 1. HashSet을 선언합니다.
Set<Integer> intHashSet1 = new HashSet<>();
// 2. HashSet에 값을 순차적으로 넣습니다.
for (int i : arr) {
intHashSet1.add(i);
}
// 3. 새로운 배열을 구성합니다.
int[] remakeArr = new int[intHashSet1.size()];
// 4. HashSet을 다시 구현함
int index = 0;
for (int i : intHashSet1) {
remakeArr[index++] = i;
} // [1, 2, 3, 4, 5]
int[] arr = {1, 1, 3, 3, 0, 1, 1};
List<Integer> arrList = Arrays.stream(arr).boxed().collect(Collectors.toList());
Set<Integer> arrSet = new HashSet<>(arrList);
int[] newArr = arrSet.stream().mapToInt(Integer::intValue).toArray(); // [1, 3, 0]
int[] arr2 = {1, 2, 2, 3, 4, 4, 5};
List<Integer> list = new ArrayList<>();
for (int i : arr2) {
if (!list.contains(i)) {
list.add(i);
}
}
int[] remakeArr2 = new int[list.size()];
int index2 = 0;
for (int i : list) {
remakeArr2[index2++] = i;
}