on
Java - 데이터 타입 (기본타입, 참조타입)
Java - 데이터 타입 (기본타입, 참조타입)
기본 변수 타입
- 논리형 변수타입
boolean (기본타입하고 형변환 불가)
- 문자열 변수타입
char (단일 문자열, 아스키코드, 유니코드)
- 정수형 변수타입
byte (1Byte, -128 ~ 127)
short (2Byte, -32,768 ~ 32,767)
int (4Byte, -2,147,483,648 ~ 2,147,483,647)
long (8Byte, - 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 )
- 부동소수점(실수형)
float (4Byte, 1.40239846E-45f ~ 3.40282347E+38f)
double (8Byte, 4.94065645841246544E-324 ~ 1.79769313486231570E+308)
참조타입 (컬렉션 프레임워크)
다수의 데이터 + 표준화
핵심 인터페이스
List : 순서가 있는 데이터의 집합. 데이터의 중복을 허용
ArrayList: 배열기반, 데이터의 추가와 삭제에 불이, 순차적인 추가삭제는 제일 빠르다.
LinkedList: 연결기반, 데이터의 추가와 삭제에 유리. 임의의 요소에 대한 접근성이 좋지 않음.
Vector: Legacy. 가변길이의 배열.
Stack: Vector를 상속받으며, 후입선출
Set : 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않음
HashSet: 데이터 중복저장 불가능(Set 상속), 순서를 보장하지 않음.
TreeSet: 데이터 중복저장 불가능(Set 상속), 오름차순으로 데이터를 정렬. (Red-Black Tree구조)
Map : Key, Value의 쌍으로 이루어진 데이터의 집합. Key는 중복허용하지 않고, Value는 중복을 허용
HashMap: 배열과 연결이 결합된 형태. 추가, 삭제, 검색, 접근성이 모두 뛰어남. 특히 검색에는 좋은 성능을 보임.
TreeMap: 연결기반. 정렬과 검색(특히 범위검색)에 적합. 검색성능은 HashMap보다 떨어짐.
Hashtable: HashMap과 거의 동일하나, 동기화가 필요할때 사용, null값이 허용되지 않음.(Error 발생)
Properties: Hasttables의 하위 Class. 파일 입출력을 지원
Collection
Collection은 Iterable 인터페이스를 상속받음. 그래서 Iterable 인터페이스는 내부에 Iterator 인터페이스를 반환하는 iterator() 메소드를 정의하고 있다.
Collection을 상속받아 List와 Set을 구현하는 클래스에서는 Iterable의 iterator() 메소드를 구현해야 함.
Collection은 기본 데이터형이 아닌, 참조 데이터형만 저장이 가능하다. 따라서 Collection에서의 데이터는 Object 타입의 객체로서 저장이 된다.
List
특징
1] 동일한 데이터의 중복을 허용.
2] 데이터 저장 순서가 유지
3] 힙(heap) 영역 내에서 List는 객체를 일렬로 늘어놓은 구조
4] 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동으로 인덱스가 부여 .
- LinkedList
List 인터페이스를 구현. (+ Deque 인터페이스와 같이) 연결 리스트. 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식의 자료구조이다. 데이터를 담고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당하는데, 객체를 추가하거나 삭제하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. 따라서, 중간에 데이터를 추가나 삭제하더라도 전체의 인덱스가 한 칸씩 뒤로 밀리거나 당겨지는 일이 없기 때문에, 추가/삭제는 용이하지만, 인덱스가 없어서 특정 요소에 접근하는데에 순차 탐색을 하게되므로, 속도가 조금 떨어진다.
(!) 데이터의 추가/삭제가 많은 경우 이 자료구조를 사용.
- ArrayList
(List 인터페이스의 구현 클래스) 크기가 가변적으로 변하는 선형리스트. 일반적인 배열과 같은 순차리스트이며, 인덱스로 내부의 객체를 관리한다는 점은 배열과 같지만, 일반 배열은 크기가 변하지않지만, ArrayList는 객체들이 추가되어 저장용량을 초과한다면 자동으로 부족한 크기만큼 저장 용량(capacity)이 늘어난다는 특징이 있다. LinkedList와는 반대로, 인덱스로 객체를 관리하기때문에, 검색측면에서는 성능이 우수하지만, 추가/삭제시에는 인덱스를 재졍렬하는 과정이 거쳐지기때문에, 속도가 조금 떨어진다.
Vector
Vector는 ArrayList와 동일한 내부 구조를 가지고 있다. Vector를 생성하기 위해서는 지정한 객체 타입을 타입 파라미터를 표기하고 기본 생성자를 호출하면 된다. ArrayList와의 차이점은, 멀티 스레드 사용시, 하나의 스레드가 실행을 완료해야만 다른 스레드가 실행을 할 수 있다는 점. (데이터의 무결성 보장)
java.util.Arrays
[Array] Arrays.copyOf(원본배열, 복사할 길이) : 원본배열에서 복사할 길이를 지정하여 배열을 리턴한다.
[Array] Arrays.copyOfRange(원본배열, 복사할 시작인덱스, 복사할 끝인덱스) : 원본배열에서 시작, 끝을 지정하여 부분적으로 배열을 가져와서 리턴한다.
HashMap
[default V] getOrDefault(Object key, V defaultValue) : 찾는 키가 존재하면 해당 키의 값을 반환하고, 없으면 세팅된 기본값을 반환.
(!) 여기서 V는 HashMap의 Collection에 선언된 타입
- put(key, value) : 기본적으로 HashMap에 key, value를 넣음.
- remove(key) : 지정한 키의 Map요소를 삭제.
- clear() : 모든 Map요소를 삭제.
- [Map.Entry] entrySet() : Map에 담겨있는 key와 value의 연결들을 반환.
- [Set] setKey() : Map에 담겨있는 key를 반환.
from http://xggames.tistory.com/41 by ccl(A) rewrite - 2021-10-20 19:00:36