본문 바로가기

JAVA35

Map key와 value값으로 이루어진 자료구조, key값이 중복되면 안되므로 set과 동일하다. Map자료를 생성할 때는 key와 value값의 자료구조를 입력 받아야한다.Map testMap = new HashMap(); Map의 메서드//저장testMap.put(key, value);//조회testMap.get(searchKey);//keySet() 이용Set keySet = testMap.keySet();for (String key: keySet) { Integer value = testMap.get(key); System.out.println("key = "+key+", value = "+value);}//entrySet() 이용Set> entries = testMap.entrySet();.. 2024. 10. 11.
해시코드 원리 set 자료 구조set자료구조는 중복을 허용하지 않고, 순서를 보장하지 않는 자료구조이다.하지만 순서(index)가 없으므로, 데이터를 추가할 때 모든 데이터를 찾아보고 없으면 추가해야한다. - O(n)이를 해시 알고리즘을 사용하면 평균 연산을 O(1)으로 끌어올릴 수 있다. 해시 indexset 자료구조에서는 순서가 없으므로 본인 데이터의 숫자(Integer에서 예를들어) index에 데이터를 채운다.만약 값이 1이라면 index(1)에 데이터를 채우게된다.하지만 데이터 하나당 인덱스를 하나 할당하면 빈 데이터가 많아져 비효율적이다.이를 해결하기 위해 데이터의 나머지를 이용해 인덱스를 채운다. 이때 중복되는 나머지가 생기는데(해시 충돌), 이는 무시하고 같은 인덱스에 배열로 채워넣는다. 데이터의 나머지.. 2024. 10. 10.
연결 리스트(Linked List) 연결 리스트의 이해배열리스트(ArrayList)는 처음부분에 데이터를 추가/삭제 할 경우 메모리가 많이 든다는 단점이 있다.빅오 표기법으로 정리해보면 >데이터 추가마지막에 추가 : O(1)앞, 중간에 추가 : O(n)>데이터 삭제마지막에 삭제 : O(1)앞, 중간에 삭제 : O(n)>인덱스 조회 : O(1)>데이터 검색 : O(n) 앞이나 중간에 데이터를 추가하거나 삭제할 때에는 나머지 배열을 밀어내야하므로 성능이 좋지않다. 연결 리스트 원리연결리스트는 인스턴스를 이용해서 item영역에 데이터를 넣고, next영역에 다음 데이터의 참조값(새 인스턴스 생성)을 연결시킨다.Node first = new Node("A");first.next = new Node("B");first.next.next = new .. 2024. 10. 7.
제네릭(Generic) 사용할 타입을 미리 설정하지 않고 인스턴스 생성 시점에 타입을 결정한다. 를 사용한 클래스를 제네릭 클래스라 한다. 클래스명 오른쪽에 와 같이 선언하면 제네릭 클래스가 된다.public class GenericBox { private T value; public void set(T value){ this.value = value; } public T get(){ return value; }}여기서 T를 타입 매개변수라 한다. (이해하기 쉽게 설명하면) 이 매개변수는 이후에 Integer, String으로 변할 수 있다. 제네릭 클래스는 다음과 같이 생성할 수 있다.GenericBox integerBox = new GenericBox();//생성 시점에 타입 인수 .. 2024. 9. 29.
자바 예외 처리(Exception) 자바 예외 처리는 체크예외와 언체크예외가 있다.언체크예외는 RuntimeException 클래스를 상속받은 예외들이고,체크예외는 RuntimeException 클래스를 상속받지 않는(Exception 클래스를 상속받음) 예외 클래스들이다. 체크예외체크예외는 복구 가능성이 있는 예외이므로 예외처리코드를 반드시 작성해줘야한다.예외를 처리하기 위해서는 throw로 던지거나 catch로 잡아줘야한다. - 체크예외는 처리하지 않으면 항상 throw로 던져줘야한다.(상위 코드로 던짐, Exception코드에서 던지면 Main으로 던져져서 컴파일 오류로 보임)public void send(String data) throws SendExceptionV3 { if(sendError){ throw new Se.. 2024. 9. 27.
메서드 인수에 메서드 넣기 public void hello(String str){ System.out.println("프로그램 시작"); System.out.println(str); System.out.println("프로그램 종료");}public static void main(String[] args) { hello("안녕"); hello("봉쥬르");} 변하는 부분(System.out.println(str);)만 변경하고 싶을 때,상황에 따라 변하는 문자열을 외부에서 받으면 된다. 하지만 변하는 부분이 아주 상관없는 코드라면? 메서드를 넣을 수 있나? 생각이 들것이다.hello(Sum());hello(Minus());하지만 이렇게는 지원하지 않고, 인스턴스를 받아서 사용하면 되는데이때 익명클래스를 .. 2024. 9. 25.