반응형
[Java] HashMap Method, 해싱 충돌 살펴보기
알고리즘/자료구조2023. 8. 19. 15:45[Java] HashMap Method, 해싱 충돌 살펴보기

HashMap - 내부적으로 hash 값을 인덱스로 하여 자료 구조 관리 - Key 중복 x , Value 중복 허용 - hash 값의 중복이 발생하는 경우 LinkedList, Tree 자료 구조 사용하여 해결하고 있음  Method 살펴보기put()- key 로 만든 hash 값에 해당하는 bucket이 없는 경우 신규 Node 저장, 있는 경우 value를 덮어씌움- 동일한 hash 값이 있는 경우 ThreadHold 값에 따라 LinkedList, Tree 로 자료 연결되어 관리 참고. HashMap put() 살펴보기  예시테스트 파일에서 공통으로 사용할 Map의 데이터를 초기화public class HashMapTest { Map map = new HashMap(); @BeforeE..

[Java] Set , HashSet 살펴보기
알고리즘/자료구조2023. 8. 19. 15:21[Java] Set , HashSet 살펴보기

Set ? - 집합을 다루는 자료구조- 중복 x, 순서 x- 대표적인 구현체 : HashSet / TreeSet / LinkedHashSet / EnumSet- 내부적으로 Map 자료 구조에 Key에 데이터를 담는다 (Map은 Key의 중복 허용하지 않음)//java.util.HashSet.classprivate transient HashMap map;private static final Object PRESENT = new Object();public HashSet() { this.map = new HashMap();}//..public boolean add(E e) { return this.map.put(e, PRESENT) == null; // HashMap의 Key에 element를 담..

[Java] Array, ArrayList, LinkedList 비교
알고리즘/자료구조2023. 8. 17. 20:51[Java] Array, ArrayList, LinkedList 비교

Array (배열)- 동일한 자료형(Data Type)의 데이터를 연속된 공간에 저장하기 위한 자료 구조- 기본형(Primitive Types) 또는 인스턴스(Reference Type)을 저장하기 위해 배열 사용- 처음 선언시 길이를 지정하기 때문에 런타임 환경에서 크기를 변경할 수 없다 (정적 할당, static allocation) Array 선언 및 초기화 예시# 1int[] arr = new int[10];arr[1] = 1; // .. 이하 생략# 2int[] arr = new int[] {1, 2, 3, 4};# 3 int[][] arr = {{1, 0}, {0, 1}, {-1, 0}, {-1, 0}}; 장점구조가 간단하고, 인덱스로 해당 element에 접근할 경우 시간 복잡도 O(1) 소..

[Java] Stream Quiz 개인 풀이 (출처. 망나니 개발자 기술 블로그)
공부/Java2023. 8. 15. 11:56[Java] Stream Quiz 개인 풀이 (출처. 망나니 개발자 기술 블로그)

목차 출처 (망나니 개발자 기술 블로그) https://mangkyu.tistory.com/116 [Java] Stream API 연습문제 풀이 (5/5) 이번에는 Stream API를 연습해볼만한 문제를 제공해보고자 합니다. 자동화된 테스트를 통해 정답을 확인하도록 제공하고 있으니 직접 문제를 풀어서 정답을 확인해보실 분들은 아래 내용을 참고 mangkyu.tistory.com *자료 받으실 때 Star 는 필수 수행 - 소요 시간 1일차 1시간 40분 2일차 40분 3일차 20분 4일차 15분 5일차 15분 암기보다는 [stream 생성 -> 중간 연산 -> 최종 연산] 과정에 집중해서 연습 Quiz1 1-1. 각 취미별 선호 인원 수 구하기 - csv 파일의 경우 readCsvLines() 통해서 ..

[Java] Quick Sort(퀵 정렬, 재귀 방식, 왼쪽/중간/오른쪽 피벗)
알고리즘/정렬2023. 8. 13. 14:12[Java] Quick Sort(퀵 정렬, 재귀 방식, 왼쪽/중간/오른쪽 피벗)

설명 - 피벗을 기준으로 좌측에 피벗 보다 작은 값, 우측에 피벗보다 큰 값을 위치 시킴 - partition(파티션)을 나눠 행위를 반복한다 - partition을 최소 까지 나눴을 때는 이미 정렬이 완료된 상태이다. 파티션을 나누기 전에 pivot 기준으로 임의 정렬을 하고 partition을 나눠 행위 반복하면 더이상 나눌 수 없을 때 이미 정렬이 완료된다. 반대로 merge sort의 경우 제일 작은 크기 까지 파티션을 먼저 나눈 후 병합을 하면서 정렬 수행한다. *과정 (1) pivot 을 정함 (2) 양쪽 끝에 L, R 포인터를 두고 다음 수행 2-1) L < pivot 경우 포인터 증가 L += 1 (pivot 기준 좌변은 항상 작아야 하므로, 큰 값이 나올 때까지 포인터 이동) 2-2) p..

[Java] Merge Sort (병합정렬)
알고리즘/정렬2023. 8. 13. 13:13[Java] Merge Sort (병합정렬)

설명 1) 리스트의 길이가 1이 될 때 까지 나눈다(mergeSort()) 2) 왼쪽과 오른쪽 리스트를 대소 비교 하여 정렬된 결과(merge()) 반환 - 재귀 함수 호출하여 작은 문제로 나눈 후 큰 문제의 정답을 구한다 - 재귀 호출로 인해 스택 오버플로우 발생가능(단점) - Java의 경우 인스턴스 메서드 *.subList(int from, int to) 사용하여 쉽게 리스트 분할 가능하다 시간 복잡도 : O(NlogN) - 파티션을 나누는데 logN 만큼 걸리고, 다시 병합할 경우 N 만큼의 소요 공간 복잡도 : O(N) 영상 참고 https://www.youtube.com/watch?v=3j0SWDX4AtU 작은 문제로 나눠서 큰 문제의 해답을 구한다 코드 - 오름차순 정렬 기준으로 작성 - 내..

JUnit5 Assertions, Assumptions
공부/Junit2023. 8. 11. 15:31JUnit5 Assertions, Assumptions

목차 JUnit4 Assert, Assume Assert, Assume 의 경우 JUnit 5에서 아래와 같이 대체가 된 것으로 확인된다. JUnit4 JUnit5 org.junit.Assert org.junit.jupiter.api.Assertions org.junit.Assume org.junit.jupiter.api.Assumptions 개인적으로 버전업에 따른 API 추가 외에 보이는 차이점은 아래와 같다. - JUnit4 Assert 에서는 Hamcrest Matcher 파라미터로 지원하였으나, JUnit5에서는 지원하지 않음 - 마찬가지로 JUnit4 Assume에서도 Hamcrest Matcher 지원하였으나, JUnit5에서는 지원하지 않고 함수형 인터페이스(BooleanSupplier) ..

[JUnit] JUnit4, JUnit5 어노테이션 비교 (생명주기, ParameterizedTest, Suite 등등)
공부/Junit2023. 8. 11. 11:06[JUnit] JUnit4, JUnit5 어노테이션 비교 (생명주기, ParameterizedTest, Suite 등등)

목차 JUnit 생명 주기 Annotation - 명칭만 변경 - @BeforeAll, @AfterAll : 클래스 단위로 시작과 종료 시점에 한번만 실행 - @BeforeEach, @AfterEach : 메서드 단위로 각 메서드의 시작과 종료 시점에 실행 JUnit4 Junit5 @BeforeClass @BeforeAll @Before @BeforeEach @After @AfterEach @AfterClass @AfterAll Junit4 Juint5 @Test Junit4 @Test timeout 과 예외 처리 관련 메타 속성이 정의되어 있었다 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface Test..

[Java] Stream 최종 연산(Terminal Operation)
공부/Java2023. 8. 5. 21:07[Java] Stream 최종 연산(Terminal Operation)

기본형(Primitive Type) Stream 1)  boxed().collect(..)- Primitive Type 의 Stream을 Boxing Type 의 Stream으로 변환한다- boxed()의 경우 중간 연산에 속하나 collect() method chaning 방식에 대해 설명하기 위해 추가Stream integerStream = IntStream.of(1, 2, 3, 4, 5).boxed();Stream longStream = LongStream.of(1, 2, 3, 4, 5).boxed();Stream doubleStream = DoubleStream.of(1.1, 2.2, 3.3, 4.4, 5.5).boxed();// List 로 최종연산 처리List integers = integer..

[GitHub] Copilot 체험판 구독 해지 (individual subscription trial)
공부/기타2023. 8. 4. 10:10[GitHub] Copilot 체험판 구독 해지 (individual subscription trial)

- Copilot 체험판을 사용하여 테스트 코드 작성시 Support 받으려 해보았지만, 원하는 정보 얻지 못해 구독 해지하게 되었습니다- 체험판 한 달 지난 후 자동 결제 처리되므로, 꼭 필요하지 않은 경우 사전에 미리 구독 취소하시는 게 좋습니다.  체험판 구독 해지 방법깃허브 로그인 - 우측 상단 프로필 클릭 - Settings 메뉴 선택 1. 좌측 [Access > Billing and plans > Plans and usage] 메뉴 선택  2. 스크롤을 아래로 내려 [Add-ons] GitHub Copilot 에서 Cancel trial 버튼 누름  3. 간단한 설문 조사 참여 후 하단에 I understand, cancel GitHub Copilot trial 버튼 누르면 구독 해지 완료

[Java] Stream 중간 연산 (Stream Intermediate Operation)
공부/Java2023. 8. 3. 22:53[Java] Stream 중간 연산 (Stream Intermediate Operation)

Stream 중간 연산1) distinct(): 중복 요소를 제거 Primitive Type 경우 // IntStream.class IntStream distinct();// #예시int[] intStream = new int[] {1, 2, 3, 4, 1, 2, 3, 4};int[] result = Arrays.stream(intStream).distinct().toArray();assertThat(result).hasSize(4); // ok Collection 경우: Person 클래스에 정의한 equals 통해 비교하여 같은 객체인지 판별한다( 동등성 )// Collection.classdefault Stream stream() { return StreamSupport.stream(this...

[Java] Stream 생성 (파일 데이터 제외)
공부/Java2023. 8. 3. 22:53[Java] Stream 생성 (파일 데이터 제외)

Collection 인터페이스 Collections 인터페이스 구현체는 stream() 메서드 호출하여 Stream 객체로 변환한다 Stream stream()public interface Collection extends Iterable { //.. default Stream stream() { return StreamSupport.stream(this.spliterator(), false); } //..} 1) ListList people = List.of(new Person("고길동", 30), new Person("마이콜", 20), new Person("고희동", 5));Stream personStream = people.stream(); 2) SetSet ..

[Java] Stream API
공부/Java2023. 8. 3. 22:52[Java] Stream API

목차 Stream ? - Java 8 부터 등장 - 다양한 data source(배열, 콜렉션 자료구조)를 표준화된 방법을 다루기 위한 방법 요약. Java Stream은 데이터를 빠르고 편리하게 대량 처리할 수 있도록 해주는 래퍼 클래스이다. 특징 ① 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다. (Read Only) List source = List.of(6, 4, 2, 3, 1, 5); List sorted = source.stream().sorted().collect(Collectors.toList()); System.out.println(source); // [6, 4, 2, 3, 1, 5] System.out.println(sorted); // [1, 2, 3, 4, 5, ..

[Java] 람다식을 더 짧게 - 메서드 참조 Method Reference
공부/Java2023. 8. 2. 20:54[Java] 람다식을 더 짧게 - 메서드 참조 Method Reference

Method Reference - Java 8 도입- 하나의 메서드만 호출하는 람다식은 메서드 참조로 간소화하여 표현가능하다 (전달 인자를 생략하여 코드 간결해짐)- 구분자로 :: 사용- 아래의 4가지 유형 있음 아래 코드는 정렬할 때 [클래스 구현 -> 람다 -> 람다 간소화 -> 정적 메서드 참조]에 대한 비교 예시이다// 배열 선언Person[] perons = ...// (1) Comparator 구현 방식 (구 시대적)class PersonAgeComparator implements Comparator { public int compare(Person a, Person b) { return a.age().compareTo(b.age()); }}Arrays.sort(persons,..

[Java] Optional 클래스 메서드 (자바의 정석)
공부/Java2023. 8. 1. 17:34[Java] Optional 클래스 메서드 (자바의 정석)

NullPointerException(NPE)- Null 상태인 오브젝트를 레퍼런스할 때 발생 - Runtime error 이기 때문에 실행 전까지 발생 여부를 알기 쉽지 않음 Runtime 환경에서 에러가 발생할 경우, 심할 경우 서버 다운까지 가능하므로 발생시 리소스 비용이 만만치 않음 "Null pointer를 발명한 것은 나의 10억불짜리 실수였다" - Tony Hoare (출처 wikipedia)I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references ..

[Java] Iterators 인터페이스 (자바의 정석)
공부/Java2023. 7. 31. 21:14[Java] Iterators 인터페이스 (자바의 정석)

목차 Interface Iterators 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 - Java 1.2 버전부터 지원 - 기본적으로 Iterators 변환의 경우 1회용이므로 순차조회 완료 시 재생성 해야함 - ListIterator의 경우 양방향으로 요소 접근이 가능하다 ( Enumeration과 Iterator는 단방향 ) 보통 요소가 있는지 확인(hasNext)하고, 요소를 읽는 것이 안전(next)하다 사용 방법 Collection 인터페이스의 iterator() 호출해서 Iterator 구현 객체를 얻어 사용 (1) List @DisplayName("Collection interface 구현체는 iterator 객체를 얻어서 요소 조회가 가능하다") @Test void listIterato..

[Java] Arrays 클래스 메서드 (자바의 정석)
공부/Java2023. 7. 31. 12:44[Java] Arrays 클래스 메서드 (자바의 정석)

목차 개인적으로 코딩 테스트, 알고리즘 문제 풀이시 아래의 static method 필수로 알고 있는 것이 좋다고 생각한다 - Arrays.sort() - Arrays.fill() - Arrays.asList() - Arrays.stream() - Arrays.toString() - Arrays.copyOf() - Arrays.copyOfRange() 배열의 동일성 확인 (1) Arrays.equals(A, B) - 두 배열의 equlity(동일성) 확인 - primitive type의 경우 값이 동일, reference type의 경우 참조 주소값이 동일한지 확인 @DisplayName("") @Test void equalsTest() { // given int[] arr1 = {1, 2, 3}; in..

[Java] String 클래스 메서드 (자바의 정석)
공부/Java2023. 7. 31. 11:54[Java] String 클래스 메서드 (자바의 정석)

String 클래스 특징 1) char[]와 메서드(기능)을 결합한 것이다 String 클래스 = char[] + 메서드(기능) - char[] : 문자열 배열 - String 클래스 생성시 heap에 실제 값(문자열)이 저장되고 stack 변수에는 참조 주소값을 가짐 2) 내용을 변경할 수 없다 (read only*) 문자의 결합을 하면 새로운 문자로 바뀌고 새로운 참조 주소를 가짐 String 클래스의 주요 메서드 참고. substring(int from, int to) "hamburger".substring(4, 8) returns "urge" "smiles".substring(1, 5) returns "mile" - 문자열 인덱스는 0번 부터 시작 - from : inclusive (포함) - t..

반응형
image