Language/Java2024. 6. 29. 01:38해시 알고리즘

import java.util.Arrays; public class HashStart1 { public static void main(String[] args) { Integer[] inputArray = new Integer[4]; inputArray[0] = 1; inputArray[1] = 2; inputArray[2] = 5; inputArray[3] = 8; System.out.println(Arrays.toString(inputArray)); int searchValue = 8; for (int inputValue : inputArray) { ..

[JAVA - 자료구조] HashSet
Language/Java2024. 6. 29. 01:38[JAVA - 자료구조] HashSet

이제 Set컬렉션에 해시알고리즘을 적용하여 Set보다 훨씬 성능이 좋은 HashSet을 구현해보자먼저 HashSet에서는 해시 알고리즘을 활용할 인덱스를 갖는 배열과 그 각각의 배열안에 해시 코드값이 같은 데이터를 저장하기위한 LinkedList로 구현된다.필드영역static final int DEFAULT_INITIAL_CAPACITY = 16; LinkedList[] buckets; private int size = 0; private int capacity = DEFAULT_INITIAL_CAPACITY;DEFAULT_INITIAL_CAPACITY: 해시 인덱스가 적용될 배열의 기본 길이를 설정하기위한 상수LinkedList[] buckets: 해시인덱스가 적용될 배열private int si..

Language/Java2024. 6. 24. 22:55[JAVA] 불변객체

기본형: 하나의 값을 여러 변수에서 절대로 공유하지 않는다참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다참조형 변수는 참조값을 복사해서 대입하기때문에 여러변수에서 얼마든지 같은 객체를 공유할 수 있다.객체의 공유는 필요할 때도 있지만 때로는 객체의 공유로 인하여 사이드 이펙트를 만드는 경우도있다.Ex)예상치 않은 참조로 인해서 기존의 참조변수의 값이 변경되어 사이드이펙트가 발생되는경우Address addressA = new Address(); Address b = addressA;위 코드가 객체의 공유를 의미하며 객체의 공유는 아래와 같은 사이드 이펙트를 유발할 수 있다.public static void main(String[] args) { Address addressA ..

[JAVA] 래퍼 클래스
Language/Java2024. 6. 24. 22:53[JAVA] 래퍼 클래스

기본형의 한계객체가 아니기때문에 메서드를 제공할 수 없다null값을 가질 수 없다래퍼 클래스 생성 - 박싱기본형을 래퍼클래스로 변경하는 것을 박싱이라고 한다Integer.valueOf(10)을 하면 Integer객체에 들어있는 값을 꺼낼 수 있다.Integer.valueOf()에는 성능최적화가 되어있는데 String pool과 같이 -128~127범위의 숫자는 pool에 미리 생성해두고 가져와서 사용한다.때문에 아래와 같은 실행결과를 얻는다public static void main(String[] args) { Integer i1 = Integer.valueOf(127); Integer i2 = Integer.valueOf(127); System.out.println(i1 ==..

[Java] Enum타입
Language/Java2024. 6. 18. 15:16[Java] Enum타입

열거형을 배우기 이전에 왜 열거형이 나오게 되었고, 열거형이 아닌 문자열을 사용했을 때, 상수를 사용했을때와의 차이를 알아보자 문자열로 구현먼저 회원등급별로 할인을 적용하는 메서드를 짤 때 문자열로 회원의 등급을 구분해보자public int discountPrice(String grade, int price) { int ratio = 0; if (grade.equals("SILVER")){ ratio = 10; } else if (grade.equals("GOLD")) { ratio = 20; } else if (grade.equals("DIAMOND")) { ratio = 30; } else { ..

[Java] - Generic
Language/Java2024. 6. 15. 21:31[Java] - Generic

제네릭이 탄생하게 된 이유만약 프로그래밍 중에 타입 별로 값을 할당하고, 보관하고, 조회하는 기능이 필요하다고 가정해보자개발자는 Integer타입, String타입, Double타입 등 먼저 기본형에 맞는 Wrapper클래스를 먼저 만들어 줄 것이다.하지만 Member, Item과 같이 프로그램 개발중에 만들어지는 인스턴스 타입도 모두 만들어야하는 안타까운 일이 발생하게 된다.public class IntegerBox { Integer value; public void setValue(Integer value) { this.value = value; } public Integer getValue() { return value; ..

[Java - 자료구조] Set인터페이스
Language/Java2024. 6. 12. 23:35[Java - 자료구조] Set인터페이스

SetSet은 유일한 요소들을 갖는 컬렉션이다.특징유일성: Set에는 중복된 요소가 존재하지 않으며 요소를 추가할 때 이미 존재하는 요소면 무시한다순서 미보장: 대부분의 셋 구현은 요소들의 순서를 보장하지 않는다빠른 검색: Set은 요소의 유무를 빠르게 확인할 수 있도록 최적화 되어있다.보통 중복을 허용하지 않으면서 요소의 유무만 확인할 경우에 사용된다.import java.util.Arrays; public class MyHashSetV0 { private int[] elementData = new int[10]; private int size = 0; public boolean add(int value) { if (contains(value)) { ..

[JAVA - 자료구조] ArrayList vs LinkedList
Language/Java2024. 6. 9. 17:32[JAVA - 자료구조] ArrayList vs LinkedList

직접 구현한 ArrayList와 LinkedList비교 EXAMPLE기능ArrayListLinkedList앞에 추가(삭제)O(n) - 1369msO(1) - 2ms중간 추가(삭제)O(n) - 651msO(n) - 1112ms뒤에 추가(삭제)O(1) - 2msO(n) - 2195ms인덱스 조회O(1) - 1msO(n) - 평균 438ms검색O(n) - 평균 115msO(n) - 평균 492ms자바의 ArrayList와 LinkedList비교기능ArrayListLinkedList앞에 추가(삭제)O(n) - 106msO(1) - 2ms중간 추가(삭제)O(n) - 49msO(n) - 1112ms뒤에 추가(삭제)O(1) - 1msO(1) - 2ms인덱스 조회O(1) - 1msO(n) - 평균 438ms검색O..

image