Collection

yeolyeol·2024년 7월 23일
0

ssafy12

목록 보기
14/32
post-thumbnail

어제 곱창을 먹고 오늘 아침에도 남은 곱창에 밥을 먹었다
얼굴이 띵띵


라이브 강의 #1

Collection - ArrayList<T>

DB의 CRUD를 다루는 기능을 제공하는 java.util 패키지
인터페이스임.

주요 인터페이스

List - 순서가 있고 중복 허락
Set - 순서가 없고 중복 허락 X
Map - Key와 대응된 Value로 이루어짐.

주요 메서드

배열(ArrayList)의 장단점

  • 장점
    • 가장 기본적인 형태의 자료 구조로 간단하며 사용이 쉬움
    • 접근 속도가 빠름
  • 단점
    • 크기를 변경할 수 없어서 추가 데이터를 위해 새로운 배열을 만들고 복사해야 함.
    • 비 순차적 데이터의 추가, 삭제에 많은 시간 이걸림.
  • ArrayList도 내부적으로 Object배열로 구현되어 있기에 배열의 장단점을 모두 가져감.

LinkedList

각 요소를 Node로 정의하고 현재 Node에는 다음 Node의 주소 값과 현재 자신의 값을 저장.
데이터를 추가하고 삭제할 때는 다음 Node를 참조하는 주고 값만 바꾸면 되기에 O(1)의 시간 복잡도를 갖는다.

ArrayList는 조회에 특화
LinkedList는 수정에 특화

주의 사항

ArrayList에서 index를 이용한 반복문으로 삭제하는 로직을 구현할 때,
사이즈가 줄어드는 것에 ⚠주의⚠

remove함수를 통해 요소를 삭제하면 size가 줄어들게 됨.

List<Integer> list = new ArrayList<>();
Random rand = new Random();

for(int i = 0; i < 10; i++){
	list.add(rand.nextInt(20));
}

for(int i = 0; i < list.size(); i++){
	if(list.get(i) % 2 == 0){
    	list.remove(i);
    }
}

비슷한 개념으로, for-each 구문에도 ArrayList의 size가 변하는 로직은 지양.


Collection - Map<K,V>

Key와 Value를 하나의 Entry로 묶어서 관리

  • Key: Object 형태로 중복 X
  • Value: Ojbect 형태로 중복 O

주요 메서드


entrySet()과 keySet()은 Set으로 관리됨.


라이브 강의 #2

정렬

요소를 특정 기준으로 내림차순 또는 오름차순으로 배치하는 것
크기를 비교할 수 있는 요소를 가지는 Collection들만 가능

  • List 개열
  • Set에는 SortedSet의 자식 객체
  • Map에는 SortedMap의 자식 객체(Key 기준)

객체의 정렬

일반적으로 우리가 만든 객체는 비교할 수 없다.
그래서 비교할 수 있게 만들어 줘야 한다.

객체를 비교 가능한 상태로 만들기

class Person implements Comparable<Person>{ // Comparable<T> 인터페이스 구현
	String name;
    int age;
    
    ...

	@Override
	public int compareTo(Person o) {
		return this.name.compareTo(o.name);
	}

위는 사람을 이름 순으로 비교 가능하게 만든 코드다.
Comparable이라는 인터페이스의 compareTo(T t) 메서드를 재정의 하면 된다.

1회성으로 정렬하기

Collections.sort(list, new Comparator<Person>(){
	@Override
    public int compare(Person o1, Person o2){
    	return o1.name.compareTo(o2.name);
    }
});

이렇게 비교 가능한 객체로 만들기 보단
이 순간에만 정렬할 수 있게 만들 수 있다.


소감

어려운 내용이 없어서 다행이다.

profile
한 걸음씩 꾸준히

0개의 댓글

관련 채용 정보