본문 바로가기
개발/JAVA

Java - Collection 핵심만 요약해보자 (List, ArrayList, Map)

by 외노자개발 2022. 11. 4.
반응형

리스트


  • 배열처럼 요소 순서가 있는 컬렉션
    • ArrayList  <- 이것만 알아보자
    • LinkedList
    • Vector (ArrayList를 우선적으로 사용)

ArrayList


  • 나중에 요소 추가 삭제 가능
  • 인덱스 값에 의한 값의 읽기/쓰기(랜덤 액세스)는, 위치에 관계없이 일정 시간으로 액세스 가능
  • 값의 빈번한 삽입 삭제는 느립니다.
  • 삽입시에 확보하고 있던 메모리의 영역을 넘으면 자동으로 메모리 재할당이 발생한다
  •  미리 요소수가 상정되는 경우 사이즈 선언하자
    • var data = new ArrayList<String>(30);
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
  public static void main(String[] args) {
    var list = new ArrayList<Integer>(Arrays.asList(10, 15, 30, 60));
    var list2 = new ArrayList<Integer>(Arrays.asList(1, 5, 3, 6));
    var list3 = new ArrayList<Integer>(Arrays.asList(1, 2, 3));

    for (var i : list) {
      System.out.println(i / 5); //2,3,6,12
    }
    //요소수
    System.out.println(list.size()); //4
    //0번째요소
    System.out.println(list.get(0)); //10
    //지정한 요소가 포함되어 있는가.
    System.out.println(list.contains(30)); //true
    //위치의 검색
    System.out.println(list.indexOf(30));  //2
    //위치를 뒤에서부터 검색
    System.out.println(list.lastIndexOf(30)); //2
    //리스트가 공백인가
    System.out.println(list.isEmpty());    //false
    //0번째의 요소삭제
    System.out.println(list.remove(0));   //10
    System.out.println(list);             //[15, 30, 60]
    //콜렉션 삽입
    list.addAll(list2);
    System.out.println(list); //[15, 30, 60, 1, 5, 3, 6]
    //list3 요소전부 삭제
    list.removeAll(list3);
    System.out.println(list); //[15, 30, 60, 5, 6]
    //0번째 요소 세트
    list.set(0, 100);
    var data = list.toArray();
    System.out.println(Arrays.toString(data)); //[100, 30, 60, 5, 6]
  }
}

 

 

Map


  • 고유 키-값 쌍으로 관리
  • 색인이 아닌 키로 정보에 액세스
  • Collection 인터페이스를 상속하지 않음 (지도를 그대로 확장 for에 전달할 수 없음)
    • HashMap
    • IdentityHashMap
    • WeakHashMap
    • LinkedHashMap
    • TreeMap
    • HashTable(HashMap 우선)

HashMap


  • 키의 순서는 보증하지 않는다
  • 내부 해시 데이블로 객체 관리
  • 해시 값은 객체 값을 기반으로 계산 된 임의의 int
    • 객체가 같으면 해시 값도 같음
  • 주1: hashCode 메소드 구현
    • 객체의 해시 값을 찾는 방법
    • 같은 값의 객체는 동일한 해시 값을 반환합니다.
    • 중복 발생하기 어렵게 적절하게 분포되어 있다
  • 주2: 해시 테이블 크기
    • 저장할 요소의 수에 대해 충분히 큰 것
    • 요소가 일정 크기를 초과하면 해시 테이블 재할당이 발생합니다.
    • var data = new HashMap<String,String>(30, 0.8F)
import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    var map = new HashMap<String, String>(Map.of("Cat", "고양이",
      "Dog", "개", "Bird", "새"));
    //지정 키가 포함되어있는가
    System.out.println(map.containsKey("Dog")); //true
    //지정 값이 포함되어있는가.
    System.out.println(map.containsValue("고양이")); //true
    //맵이 공백인가
    System.out.println(map.isEmpty()); //false
    //모든 키 취득
    for (var key : map.keySet()) {
      System.out.println(key); //Dog Bird Cat
    }
    //모든 값 취득
    for (var value : map.values()) {
      System.out.println(value); //개 새 고양이
    }
    //지정키의 값을 value로 변경
    map.replace("Cat", "cat1");
    //지정키의 값/값을 value(new)로 변경
    map.replace("Bird", "새", "bird1");
    //모든 요소 취득
    for (var entry : map.entrySet()) {
      System.out.println(entry.getKey() + ":" + entry.getValue()); //Dog:개 Bird:bird1 Cat:cat1
    }
  }
}

 

반응형

댓글