일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로그래머스
- JPA예제
- 코테공부
- nestjs
- 스프링부트공부
- nestjs공부
- 알고리즘공부
- 플러터 공부
- 카프카
- Kafka
- 코테준비
- 자료구조공부
- 스프링공부
- 플러터 개발
- Axon framework
- 기술면접공부
- JPA스터디
- JPA공부
- JPA 공부
- 스프링부트
- nestjs스터디
- 스프링
- JPA
- 자바공부
- Flutter
- querydsl
- K8S
- 스프링 공부
- 기술공부
- DDD
- Today
- Total
목록Language/[Java] (91)
DevBoi
래퍼 클래스 프로그램에 따라 기본타입의 데이터를 객체로 분류해야하는 경우가 있다. 메소드의 인수로 객체 타입만 요구되거나, nullable 한 상태가 요구될때 해당 클래스를 사용한다. 이럴때 기본타입에 해당하는 데이터를 객체로 포장해주는 클래스를 래퍼클래스라고 합니다. 박싱/언박싱 박싱 : 기본타입 -> 래퍼 클래스 언박싱 : 래퍼클래스 -> 기본타입
== 연산자는 기본타입의 데이터 값을 비교한다. 객체나 레퍼런스 타입에 대해서는 주소값을 비교한다 사실 기본형도, Constant Pool에 있는 특정 상수를 참조하는 것이기 때문에, 결국 주소값을 보는 것이다. 같은 상수를 참조하면 주소값이 같기 때문에 동일하게 나오는 것이다. equals는 최상위 클래스인 object에 포함되어있기 때문에 하위 클래스에서 재정의가 가능하다. Object에서는 하위로, 주소값에 대한 비교만 한다. public boolean equals(Object obj) { return (this == obj); } 추가로, String class에서는 이 equals에 대한 오버라이드를 하고있는데, 해당 부분에서 주소가 달라도 문자열이 같은경우 true로 되는 것이다. 주소가 같으..
특징 1. 데이터 순서 있음 2. 연속적인 메모리 할당 3. LinkedList 보다 검색 빠름 4. LinkList 보다 데이터 추가 삭제 느림 5. list는 데이터 내 빈 객체를 허용하지 않는다. 6. list 크기를 동적으로 늘릴수있다. 설정한 저장용량을 넘어서면, 크기를 1.5배로 증가시킨다.(수치는 설정 가능) 7. 동적으로 크기가 늘어날때는 기존 배열에서 커진 배열이 생성되고, 기존 값을 복사하여,생성된 배열에 옮긴다. 8. list내에서는 빈갑을 허용하지 않기 때문에, 삭제 작업이 발생시에 원소 한개씩 땡기거나 미루는 작업이 발생된다.
Set인터페이스를 구현한 클래스로써 객체를 중복해서 저장할 수 없고, 저장 순서가 유지 되지않는다. TreeSet이란 이진탐색트리 구조로 이루어져 있다. -추가,삭제에는 시간이 더 걸리지만, 검색과 정렬에는 유리하다 -불균형으로 인한 퍼포먼스 문제를 해결한 레드블랙 트리로 구현되어있다. -한번 저장할때마다 정렬된 상태로 저장이 되기때문에, 검색 및 정렬에 유리하다 (LinkedList의 검색은 처음부터 탐색을 해야하기 때문에, 검색이 느리다는 단점을 보완해준다.) * 레드블랙트리 넣을때 노드보다 큰값이면 오른쪽, 작으면 왼쪽으로 이동해서, 넣는 방식, 구현되어있는 방식이다. ex) (추가: 유용한 메서드들 )
HashSet과 동일한 구조를 가지지만 HashSet은 순서를 관리하지 않아, 출력할때마다 다른 순서대로 출력이된다. 하지만 LInkedhashSet은 등록한 순서대로 출력을 한다. 공통점 은 중복값을 허용하지 않는다 HashSet의 경우에는 데이터를 해싱한 값을 배열 인덱스로 활용하여 저장하여 순서가 지켜지지않는다. LinkedHashSet의 경우에는 동일하게 저장하지만 prev와, 다음 노드를 저장하는 next를 두는 양방향 연결구조를 가지고, 상호 연결을 해주는 원리로 저장이 되기 때문에, 순서를 보장할 수 있도록 LinkedList의 기능이 추가 되었다고 이해하면된다.
Set 인터페이스 구현 클래스 HashSet은 객체들을 순서없이 저장하고 동일한 객체를 중복저장 하지 않는다 순서가 보장되지 않는다 HashSet은 저장하기 전에, hashCode() 메서드를 호출해서 해시코드를 얻고 이미 저장 되어있는 객체들의 해시코드와 비교한다. 만약에 해시코드가 있다면 equals를 사용하여, 두 객체를 비교해 동일 객체로 판단되면, 저장하지 않는다
Map interface를 구현한 3가지 구현체들의 차이는 간략하게 아래와 같다. HashMap : 동기화를 지원하지 않는다 HashTable : 엄청 초반에 만들어졌고, 동기화를 지원한다. ConcurrentHashMap: 동기화를 지원하고 HashTable 보다 성능이 좋다 그러면 ConcurrentHashMap이 왜 성능이 더 좋은지 알아보자 HashTable은 empty체크나 사이즈 체크 등 주요메서드들에 전부 syncronized처리가 되어있고, 한개의 쓰레드만 사용가능하게끔 락을 걸어놨다 예) 예시로, hashTable에서 put을 한다고 가정해보자 HashTable에서는 전체 메소드에 쓰레드 락이 걸려있고 ConcurrentHashTable에는 put 메서드 내, 이미 데이터가 존재하여, 교..
이진 트리를 기반으로한 Map 컬렉션이다. 같은 Tree 구조로 이루어진 TreeSet과의 차이점은 TreeSet은 그냥 값만 저장한다면, TreeMap은 키와 값이 저장된 Map Entry를 저장한다는 것이다. 키는 저장과 동시에 자동 오름차순으로 정렬되고 숫자타입을 경우에는 값, 문자열 타입을 경우에는 유니코드로 정렬한다. 부모키값과 비교해서 키값이 낮은 것은 왼쪽에 저장하는 식이다. HashMap보다 성능이 떨어진다. TreeMap은 데이터를 저장할때 즉시 정렬하기에 추가,삭제가 HashMap보다 오래걸린다. 정렬된 상태로 Map을 유지해야하거나, 정렬된 데이터를 조회하는 범위검색이 필요한 경우 TreeMap을 사용하는 것이 좋다. 이진트리의 문제점을 보완한 레드블랙트리로 이루어져있다. 데이터가 들..
순서를 유지하는 해시맵 LinkedHashMap은 Java의 HashMap을 확장하는 클래스이다. HashMap은 해시함수를 통해, 인덱스를 매핑을 하고 해당 인덱스에 저장을 하는 구조로 이루어져있다. 따라서 순서를 보장하지 않는다 LinkedHashMap을 통하면 순서를 유지할 수 있다. 해당 유지할 수 있는 이유는, doubly linked list로 삽입한 값들을 관리하고, 삽입한 순서대로 값을 가져오고자 할때 사용할 수 있기 때문이다. head와 tail로 데이터들을 관리하고, 신규로 데이터가 들어오면 다음 노드를 이어붙여주는 방식으로 구현이 되어있다.
Java 에서 HashMap은 key-value 값으로 이루어져 있고, key를 사용하여, value 값을 얻어낸다. Key는 중복을 허용하지 않고, Value는 중복을 허용한다. HashMap의 내부구조는 배열로 되어있고, Key는 직접 내부의 인덱스가 될 수 있으며 이를 버킷이라고 한다. 인덱스를 구하기 위해서는, 해시함수를 사용하는데 Hashcode % M 으로 산출할 수 있으나, 동일한 key값이 발생할 수 있고, 이를 해시 충돌이라고 한다. 이를 방지하기 위해서는 Open Addressing 방식과 Separate Chaning 방식이 있고, 해시 맵은 후자를 사용한다. Separate Chaning(동일한 해시값이 있을 경우, LinkedList로 관리하고, 8개 이상인 경우 Tree로 변경하..