목록CS/JAVA (11)
celina의 이것저것

Map 은 키-상을 저장하는 자료구조이다. 참고로 순서를 유지하지 않는 자료구조이다. 키: 맵 내에서 유일해야한다. 중복될 수 없다값: 중복될수 있다 이전에 봤던 set과 list는 제일 부모단에 collection이라는 자료구조에 상속되는 구조인데 map자료구조는 그렇지 않다. 바로 map 인터페이스에만 상속이 된다. 왜냐하면 기존에 ser과 list와는 성질이 다르기 때문이다. 키-값 이라는 특이하게 생긴 자료구조이기 때문에 collection을 상속받지 않는 것이다. 대부분 HashMap을 주로 사용한다. Map자료구조를 사용하는 예제package collection.map;import java.util.Collection;import java.util.HashMap;import java..

자바에서 set을사용할때는 Set인터페이스를 사용한다. HashSet, LinkedSset, TreeSet 등 여러 구현체들을 가지고 있다. 1. HashSet가장 기본이 되는 HashSet이다.순서: 특정 순서 없이 저장, 순서 보장 안함 용도: 데이터의 유일성만 중요하고, 순서가 중요하지 않은 경우 시간복잡도: O(1) 2. LinkedSetHashSet + LinkedList를 합친 것이다. 순서: 추가된 순서대로 유지, 순서대로 조회 시 요소들이 추가된 순서대로 반환됨용도: 데이터의 유일성과 합께 삽입 순서를 유지해야 할 때시간복잡도: O(1) 2. TreeSet이진 탐색 트리를 개선한 레드-블랙 트리를 내부에서 사용함순서: 요소들은 정렬된 순서로 저장됨용도: 데이터들을 정렬된 순서로..

정의: 해시 알고리즘을 사용하여 Set 자료구조를 구현하는 것이다. 기존의 Set구현은 데이터를 추가하는 add에서 데이터의 중복 유무를 확인하기 위해 contains를 호출하는데 이 데이터를 찾을 때 셋에 있는 모든 데이터를 찾아 비교해야한다.그래서 add -> O(N) contains -> O(N)이 걸린다. 이제 이 시간복잡도를 해시 알고리즘을 사용하면 O(1)으로 성능을 향상시킬 수 있다. package collection.set; import java.util.Arrays; import java.util.LinkedList; public class MyHashSetV1 { static final int DEFAULT_INITIAL_CAPACITY = 16; L..

0. 리스트 vs 세트리스트: 순서유지, 중복허용, 인덱스 접근세트: 유일성, 순서미보장, 빠른검색 셋은 주로 요소의 유무가 중요한 경우에 사용한다. 셋을 직접 구현해보자import java.util.Arrays; public class MyHashSetV0 { private int[] elementData = new int[10]; private int size = 0; // O(n) public boolean add(int value) { if (contains(value)) { return false; } elementData[size] = value; size++; return true; ..

1. 리스트 추상화List 자료구조는 순서가 있고, 중복을 허용하는 자료 구조이다.ArrayList와 LinkedList는 내부 구현만 다를 뿐 같은 기능을 제공한다. 그래서 공통 기능을 인터페이스로 뽑아서 추상화하면 다형성을 이용할 수 있다. 2. 리스트 추상화 - 의존관계 주입예를 들어 많은 데이터를 처리하는 프로그램이 있다. 처음엔 ArrayList를 이용해서 개발을 했는데 막상 만들고 보니 LinkedList 자료구조를 쓰는게 더 효율적인 상황이다. public class BatchProcessor {private final MyArrayList list = new MyArrayList(); //코드 변경public void logic(int size) { for (int i = 0; i 원래..
기존의 ArrayList는 Object 타입으로 입력받기 때문에, 필요에 의해 다운캐스팅을 해야하고, 타입 안전성이 떨어지는 경우가 있다.-> 제네릭 타입을 이용하자 public class MyArrayListV4 { private static final int DEFAULT_CAPACITY = 5; private Object[] elementData; private int size = 0; public MyArrayListV4() { elementData = new Object[DEFAULT_CAPACITY]; } public MyArrayListV4(int initialCapacity) { elementData = new Object[initialCapacity]; ..

문제1) 반복적인 코드 public class IntegerBox { private Integer value; public void set(Integer value) { this.value = value; } public Integer get() { return value; }}public class StringBox { private String value; public void set(String object) { this.value = value; } public String get() { return value; }} 이렇게 다양한 타입을 담는 박스가 있을때 사용을 하려면 밑의 코드처럼 각 타..
자바에서 String은 "클래스"이다. 변수는 int, double 등과 같이 소문자로 시작하지만 String은 대문자로 시작한다. 이유는 클래스이기 때문이다. 그래서 참조형이다. 클래스 이기 때문에 다양한 메서드들을 사용할 수 있는 것이다. 예를 들면 length(), trim()와 같은 것들 String 클래스를 통해 문자열을 생성하는 방법 1. 쌍따옴표 사용 String str1 = "hello"; 2. 객체 생성String str2 = new String("hello"); String은 클래스라서 객체를 생성할 수 있고 참조형이다. 근데 생각해 보면 str2 변수애는 참조형이 들어가야햔다. 왜냐하면 클래스니까 사실 1번의 코드는 이상하게 생각될 수 있다.하지만 자바에서 문자열은 자주 사용되서..