List, ArrayList, Stack, Queue 비교

jiji·2023년 10월 20일
0

JAVA

목록 보기
5/9
💡 import java.util.*

1. Stack

마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO

저장

  • Object push(Object item)

반환

  • Object pop() : 맨 위 객체를 삭제하고 반환
    비어있으면 EmptyStackException 발생
  • Object peek() : 삭제하지 않고 객체 반환
    비어있으면 EmptyStackException 발생
  • boolean empty() : 비어있는가(T/F)
  • int search(Object o) : 객체의 위치 반환
    못 찾으면 return -1, 위치는 0이 아닌 1부터 시작
      if (stack.isEmpty() || stack.peek() != num) {
        stack.push(num);
      }
      if (stack.isEmpty() || stack.peek() != num) {
        stack.push(num);
      }

2. Queue

먼저 들어간 데이터를 먼저 꺼내는 FIFO

값 리턴예외 발생
추가offer(e) : falseadd(e) : IllegalStateException
제거하고 반환poll() : nullremove() : NoSuchElementException
값 읽어오기peek() : nullelement() : NoSuchElementException
  • size(): 큐의 원소 개수를 반환합니다.
  • isEmpty(): 큐가 비어있는지 여부를 확인합니다.
  • clear(): 큐의 모든 원소를 제거하여 비웁니다.
  • toArray(): 큐의 모든 원소를 배열로 반환합니다.

3. ArrayList

생성자

<- 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() 메소드와 반대

배열/리스트 순서관계 없이 중복요소 제거

💡 해당 방법은 배열/리스트에서 순서관계 없이 중복된 요소를 제거하고 하나로 구성하는 방법입니다.

배열(Array)의 중복된 값 지우기

  1. Stream의 중복된 값 지우는 방법 : distinct - 순서 그대로
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]
  1. Set을 이용한 값을 지우기 방법 : Set() - 자동 정렬
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]
  1. Set + Stream을 이용한 방법
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]
  1. ArrayList와 Contains를 이용한 방법 : ArrayList & Contains
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;
}

0개의 댓글

관련 채용 정보