[TIL] 플레이데이터 인공지능 24기 DAY 96

황예빈·2022년 12월 20일
0

플레이데이터 TIL

목록 보기
11/21
post-thumbnail

Generic 구문

제네릭이란
클래스나 메서드 내부에서 변수 타입, 리턴 타입, 매개변수 타입을 미리 확정 짓지 않고 외부에서 객체 생성 또는 메서드 호출 시점에 타입을 결정하도록 하여 하나의 클래스, 메서드에서 여러 가지 타입을 다룰 수 있도록 하는 처리 기법입니다.

class Value3<T>{ // generics 구문 =>  타입 파라미터 적용
	T obj;
	
	void put(T obj) {
		this.obj=obj;
		
	}
	T get() {
		return obj;
	}
}

타입 파라미터를 사용해서 어떤 객체가 입력으로 들어오더라도
형 변환을 따로 해주지 않고도 메소드를 사용가능해짐!


Value3<String> o4 = new Value3<String>();
o4.put("ABC");
String s4 = o4.get();
System.out.println(s4);
		
Value3<Date> o5 = new Value3<Date>();
o5.put(new Date());
Date s5 = o5.get();
System.out.println(s5);

결과 :

ABC
Tue Dec 13 19:35:27 KST 2022

Linked List

class LinkedListExample1 {
    public static void main(String args[]) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("포도");          
        list.add("딸기");          
        list.add("복숭아");          
        int num = list.size();
        for (int cnt = 0; cnt < num; cnt++) {
            String str = list.get(cnt);
            System.out.println(str);
        }
        LinkedList<Integer> list2 = new LinkedList<Integer>();
        list2.add(Integer.valueOf(100));       
        list2.add(1000);// JDK 1.5 부터 AUTO Boxing 이라는 구문이 지원
        //list2.add("1000");
    }

연결된 리스트 라는 뜻으로 각 노드가 데이터와 포인터를 가지고 한 줄로 연결된 자료구조
ArrayList에 비해 데이터의 추가나 삭제가 용이하지만 특정요소에 접근하기 위해서는
순차 탐색이 필요하기 때문에 탐색 속도는 떨어진다.

  1. Linked List 객체 생성하는 법
LinkedList<변수 타입> list = new LinkedList<>();
  1. 주요 API
    list.add(a) : list에 a라는 값을 추가
    list.add(a, b) : a번째에 b값을 추가하고 원래 a번째에 위치하던 값은 a+1번째가 됨
    list.size() : 리스트의 크기 반환
    list.get(a) : 지정된 a번째에 해당하는 리스트에 저장된 값을 가져온다.
    list.set(a,b): a번째에 값을 삭제하고 b로 대체함
    list.remove(a): a번째 값을 삭제
    list.indexOf("a"): a라는 값의 인덱스를 반환
    list.lastIndexOf("a"): 값이 2개 이상일 때 a의 가장 큰 인덱스 값을 반환
  1. AUTO Boxing 지원
    LinkedList list2 = new LinkedList();
    list2.add(Integer.valueOf(100));
    list2.add(1000);// JDK 1.5 부터 AUTO Boxing 이라는 구문이 지원
    //list2.add("1000");
  1. ArrayList와의 차이점
    LinkedList 는 초기 크기를 미리 생성할 수 없다.
  2. Linked List에 저장된 값을 출력하는 방법

(1) iterator 사용

  Iterator<String> iterator = list.iterator();   
        while (iterator.hasNext()) {
            String str = iterator.next();
            System.out.println(str);

(2) traditional for

  int num = list.size();
        for (int cnt = 0; cnt < num; cnt++) {
            String str = list.get(cnt);
            System.out.println(str);
        }

(3) enhanced for

 for(String fruit : list)
        	System.out.println(fruit);

ArrayList

일반 배열과 ArrayList는 인덱스로 객체를 관리한다는 점에서 동일하지만, 크기를 동적으로 늘릴 수 있다는 점에서 차이점이 있다.ArrayList는 내부에서 처음 설정한 저장 용량(capacity)가 있다. 설정한 저장 용량 크기를 넘어서 더 많은 객체가 들어오게 되면, 배열 크기를 1.5배로 증가시킴

장점 : 내부적으로 배열을 이용하기 때문에 인덱스를 이용하여 접근하는 것이 빠르다.

단점 : 데이터를 리스트의 처음이나, 중간 지점에 저장하면 또는 삭제한다면, 배열 특성상 엘리먼트들을 하나씩 뒤로 물리거나, 앞으로 당겨야 한다. => 배열 추가 삭제시에는 Linked List를 사용하는게 용이

  1. Linked List 객체 생성하는 법
    ArrayList list = new ArrayList();
  2. 주요 API(배열과 거의 동일!)
    list.add(a) : list에 a라는 값을 추가
    list.add(a, b) : a번째에 b값을 추가하고 원래 a번째에 위치하던 값은 a+1번째가 됨
    list.size() : 리스트의 크기 반환
    list.get(a) : 지정된 a번째에 해당하는 리스트에 저장된 값을 가져온다.
    list.set(a,b): a번째에 값을 삭제하고 b로 대체함
    list.remove(a): a번째 값을 삭제
    list.indexOf("a"): a라는 값의 인덱스를 반환
    list.lastIndexOf("a"): 값이 2개 이상일 때 a의 가장 큰 인덱스 값을 반환

3.배열과 다른 점

(1) 배열은 크기가 고정되어있지만 arrayList는 사이즈가 동적인 배열이다.

(2) 배열은 primitive type(int, byte, char 등)과 object 모두를 담을 수 있지만, arrayList는 object element만 담을 수 있다.

(3)배열은 제네릭을 사용할 수 없지만, arrayList는 타입 안정성을 보장해주는 제네릭을 사용할 수 있다.

(4) 길이에 대해 배열은 length 변수를 쓰고, arrayList는 size() 메서드를 써야한다.

(5) 배열은 element들을 할당하기 위해 assignment(할당) 연산자를 써야하고, arrayList는 add() 메서드를 통해 element를 삽입한다.

  1. Array List에 저장된 값을 출력하는 법
    Linked List와 동일

hash Table hash Map

HashMap과 HashTable은 Java의 API 이름이다. HashTable이란 JDK 1.0부터 있던 Java의 API이고, HashMap은 Java 2에서 처음 선보인 Java Collections Framework에 속한 API임

'키에 대한 해시 값을 사용하여 값을 저장하고 조회하며, 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 associate array'

  1. 객체 생성

Hashtable<String, Integer> hashtable = new Hashtable<String, Integer>();

hash Set

profile
Lv. 23

0개의 댓글