목록언어 (31)
개발자는 기록이 답이다

HashMap은 Map인터페이스 기반의 Hashtable 구현체라고 알려져 있다.구글링해서 많은 자료들을 찾아봤지만,CS에서 사용하는 HashTable이라는 개념과 Java코드로 구현한 Hashtable, HashMap을 같이 엮어서 생각해보려니까bucket, entry, node 등 용어들이 헷갈린다. 그래서 직접 디버깅하면서 원리를 파악해보고자 한다.(본 포스팅을 보기 전에 우선 동일성과 동등성 개념에 대한 이해가 있어야 한다) 1. HashSet은 중복을 허용하지 않는다 HashSet의 특징이라고 하면 순서가 중요하지 않고 중복을 허용하지 않는 자료구조라고 많이 알고 있다.그런데 이 "중복"의 기준이 뭘까? Person클래스를 만들어서 HashSet에 데이터를 저장할때 add()메소드를 사용할 것이..

자바의 신 1권 15장 String에 대해 공부하면 아래와 같은 문장이 나온다. JDK 5이상에서는 여러분들이 String의 더하기 연산을 할 경우, 컴파일 할때 자동으로 해당 연산을 StringBuilder로 변환해준다. 따라서, 일일이 더하는 작업을 변환해 줄 필요는 없으나, for루프와 같이 반복 연산을 할 때에는 자동으로 변환을 해주지 않으므로 꼭 StringBuilder가 필요하다. 이게 무슨 말인지 한 번 소스코드를 컴파일하고 바이트코드를 확인해보자. 1. String은 불변 객체 컴파일 최적화에 대해 알아보기 전에 간단하게 String의 배경지식을 알고 있어야 한다. 자바 문서를 보면 String은 상수라서, 객체가 생성된 이후에는 값이 변하지 않는다고 써져있는 걸 볼 수있다 * String..

인터페이스와 정적 메서드 자바 8과 9에서 주요 인터페이스(e.g. Comparator)의 변화가 일어났다. 기본 메서드(defaultl method)와 정적 메소드를 가질 수 있다. 기본 메소드 인터페이스에서 메소드 선언 뿐 아니라, 기본적인 구현체까지 제공할 수 있다. 기존의 인터페이스를 구현하는 클래스에 새로운 기능을 추가할 수 있다. 정적 메소드 자바 9부터 private static 메소드도 가질 수 있다. 단, private필드는 아직도 선언할 수 없다. 자바 8 이전에는 interface에서 메소드선언만 가능하고 정의하는게 불가능했었다. 그런데 나는 자바 17을 사용하는데 왜 "Interface abstract methods cannot have body"라는 컴파일 에러가 나는것 일까? 인..

알고리즘 할때 ArrayList를 자주 썼는데, 내부적으로는 어떻게 동작하는지 알아보기 위해 해당 포스팅을 작성해보려고 한다. ArrayList란? Java의 동적 배열인 ArrayList는 내부적으로 배열을 기반으로 하는 자료 구조이다. 크기를 동적으로 조절 가능하여 원소의 추가와 삭제가 용이하며, 랜덤 액세스에 강점을 가지고 있다. 중간에 원소를 추가하거나 삭제할 때는 다른 원소들을 이동시켜야 하므로 성능 저하가 있을 수 있다. 크기 조절은 현재 크기의 1.5 배로 확장하는 방식을 사용한다. 특히 동적인 데이터 크기 및 빈번한 원소 조작이 필요한 상황에서 적합한 자료구조이다. ArrayList의 동적 크기 확장의 메커니즘 ArrayList의 동적 크기 확장은 내부적으로 배열을 사용하며, 배열이 가득 ..