기록
  • 1006(16일차)
    2023년 10월 06일 15시 15분 27초에 업로드 된 글입니다.
    작성자: 삶은고구마

    복습

    Data Structure

    -data in memory 대용량 데이터를 메모리에서 처리하는 방법

    List:순서가 중요할때, 정렬 필요할 때.

    set:중복을 허용하지 않을 때

    map:key와 value를 묶어서 분류할 때(key로 value를 찾음,key는 중복x) 


    List

    ArrayList

    LinkedList

    :위의 두 리스트는 사용할 수 있는 메소드는 같지만 구조가 다름

    Queue

    Stack

    ArrayList LinkedList
      내부 배열을 관리하지 않는다.
      요소와 요소를 연결해서 관리한다.(주소값)
      중간에 요소 추가 및 삭제가 빈번한 데이터에 사용.
    그래서 
    조회/검색이 빈번하다면 ArrayList가 더 효율적이다.
    =>검색은 ArrayList가 빠름.
    =>LinkedList는 전부 다 뒤져봐야함.
    마지막 요소는 다음번지를 가르키는 값이 null

     

    Queue Stack
    선입선출(FIFO):먼저들어오고 먼저 나간다
    후입선출(LIFO):나중에 들어온게 먼저 나간다
    Queue.offer(T)
    :마지막에 요소 추가

    Queue.poll():T
    :맨 앞에 요소 가져오고 제거

    while(!queue.isEmpty())
    :일괄출력할 때 비어있는지 물어보고 true면 반복

    Stack.push(T)
    :마지막에 요소 추가

    Stack.pop():T
    :마지막 요소 가져오고 제거

    Stack.peek():T
    :마지막 요소 엿보기(제거하진 않음)
    ArrayList와 같은 배열기반 작업 데이터 추가/삭제가 용이한 LinkedList

    Set

    -집합

    -중복을 허용하지 않는 자료 구조.

    -저장한 순서를 보장하지 않는다.

    -커스텀 클래스인 경우 equals와 hashcode override 필수.

    -다형성과 제네릭 적용

     

    1)HashSet

    HashSet<Integer> set1 = new HashSet<>();
    Set<String>set2 = new HashSet<>();
    Collection<Double> set3 = new HashSet<>();


    요소 추가 set2.add("hi"); 
    해당 제네릭에 맞춰서 추가해줘야 한다. set2는 String만 다룬다.
    요소 출력 순서를 보장하지 않기 때문에 get(index)같이 인덱스를 사용할 수 없음.
    일반for문 사용불가
    전체를 순회하면서 꺼내와야 한다.
    중복된 요소가 있다면 중복이 제거되어 한 번만 출력된다
    add한 순서와 상관없이 출력된다.

    출력방법
    1)foreach
    for(String str:set2)

    2)Iterator
    Iterator<String> iter = set2.iterrator();
    while(iter.hasNext())


    요소 삭제 println등으로 확인시 true/false도 반환한다.
    equals, hashcode기반으로 요소를 찾아 삭제.
    set2.remove("hi");

    요소 갯수 set2.size();
    요소 포함 여부 set2.contains("bye");
    포함되어있다면 true를, 포함되어있지 않다면 false 리턴

    List<->Set 으로 사용하는 경우도 있음.

    List에서 Set: 중복제거

    Set에서 List: 정렬필요

    List<Integer> list = new ArrayList<>();
    		list.add(3);
    		list.add(3);
    		list.add(1);
    		list.add(3);
    		list.add(5);
    		
    		System.out.println(list);
    		
    		//Set으로 변환 set생성시 list의 제네릭과 동일한 타입으로,.
    		Set<Integer> set = new HashSet<>(list);	
    		System.out.println(set); //중복 제거
    		
    		//
    		
    		Set<Integer> nums = new HashSet<>();
    		nums.add(11);
    		nums.add(26);
    		nums.add(44);
    		nums.add(100);
    		
    		List<Integer> lists = new ArrayList<>(set);
    		System.out.println(lists); //순서

     

     

    2)LinkedHashSet

    중복제거, 저장한 순서를 유지함

    add로 요소 추가 시 , 추가한 순서 유지. but 여전히 index 사용 불가

    3)TreeSet

    중복제거, 기본정렬을 지원한다.

    오름차순으로 정렬


    Map

    -key와 value가 한 쌍의 요소인 자료 구조.

    -key는 중복을 허용하지 않는다.

    -key를 통해 value를 조회하는 구조.(속도가 빠르다)

    -동일한 key로 새 value를 저장하면 기존 value에 덮어씌워진다.

    -컬렉션을 통해 제어 할 수 없다.

     

    1) HashMap

    HashMap<k,v> 변수명 = new HashMap<>();

    Map<k,v> 변수명 = new HashMap<>(); 

     
    Map<String, Integer> map = new HashMap<>();
    요소 추가하기 map .put(k,v); 
    지정한 제네릭에 맞춰서 key value값 대입 
    예시에선 key:String / value:Integer 타입이다.
    요소 가져오기 map .get(k);
    저장된 요소 갯수 map .size();
    요소 삭제 map.remove(k);
    key값으로 삭제함. 만약 print문으로 감싼다면 삭제된 value를 반환해서 출력해줌.
    key 값 포함 여부 true false로 반환
    map.containsKey(k);
    value 값 포함 여부 true false로 반환
    map.conteainsValue(v);
    Map 순회하기
    맵은 순차적으로 접근이 불가능하다. (인덱스 x 반복문 x)
    우회적으로 순회하여 값을 확인해야한다.
    keySet() entrySet()
    Set<k>
    키 값을 Set으로 반환한다.
    set과 map 둘다 중복을 허용치 않기 때문에 가능.
    Set<Entry<k,v>>
    key와 value를 묶어서 entry로 제어한다.

     

    2)LinkedHashMap

    3)TreeMap

     

    3)Properties

    -collections Framwork 이 전부터 사용된 legacy 클래스.

    -현재에도 사용됨.

    -key,value 타입을 String으로 제한한 맵 형식의 자료 구조.

    -실제 설정파일 *.properties의 내용을 읽어 프로그램으로 가져오는데 사용한다.

    -그 외에 xml도 다룰 수 있다.

     

    '공부' 카테고리의 다른 글

    1011 (18일차)  (4) 2023.10.11
    1010 (17일차) 예외처리  (2) 2023.10.10
    1005(15일차)  (0) 2023.10.05
    1004 14일차  (2) 2023.10.04
    0927 13일차  (0) 2023.09.27
    댓글