: 동일한 타입의 데이터를 여러 개 가질 때 사용하는 자료 구조.
String[] stringArray;와 같이 정의
Array의 생성은 new String[size]와 같이 생성.
Array가 생성되었다고 Array에 들어가는 객체가 생성된 것은 아니다. 해당 값은 null.
Array의 크기는 stringArray.length로 획득.
Array에 대한 연산은 java.util.Arrays class를 사용.
: 자료의 집합 형태에 대한 표준적인 Framework를 정의한 인터페이스/유틸리티들의 목록이며 J2SE1.2에서 명명됨
Java SE API java.util Package에 속함.
자바를 이용한 자료구조/알고리즘을 정의하고 동작시키는 클래스 라이브러리 의미.
자바에서 객체를 저장하는 방법 의미.
배열도 일종의 Collection.
: 탑(Top)이라고 한 끝에서 모든 삽입과 삭제가 일어나는 순서 리스트
구조 : 후입 선출(LIFO)
자바에서 스택이 표준 API로 구현되어 제공
: 한 쪽 끝에서 데이터가 삽입되고 반대쪽 끝에서 삭제가 일어나는 순서 리스트
구조 : 선입 선출(FIFO)
자바에서는 보통 ArrayList 또는 Vector를 이용해서 사용
: 크기가 변하는(삽입, 삭제) 순차 리스트를 요구할 때 각각의 노드들의 연결로 이뤄져있는 리스트의 구조 필요.
연결 리스트들의 노드들은 메모리의 순차적 위치에 존재하지 않음(보통 포인트 또는 참조를 통함)
이러한 연결은 다음 노드를 가리키기 위한 연결자를 가지고 연결되고 노드들의 위치는 실행 시마다 바뀔 수 있음
구조 : 데이터부(data field)와 연결부(linked field)로 구성되며 각각은 여러 개의 서브부로 나눠짐
JCF에서는 LinkedList가 대표적 구현체
: Key와 그에 대응되는 Value의 쌍으로 구현
검색 속도가 제일 빠르며, Dictionary(사전) 형태의 데이터 구조를 의미함.
associative array라고도 하며, JCF에선 Map 계열의 구현체가 이에 해당함.
Java의 Heap Memory는 바로 이 구조를 일컫는다.
그 외 Tree 등 다양한 자료구조와 알고리즘이 존재.
: 객체들의 모임을 저장하기 위한 공통적 행위들을 선언, 개별적인 요소들을 모아 둠.
List, Set, Queue(1.5 추가)가 대표적 하위 인터페이스
: 키와 그에 대응되는 값의 쌍으로 구성되는 객체들을 모아 놓은 구조로 연관 배열이라고도 함.
: 보통 Collection, Map의 실체 구현체의 데이터를 반복해서 찾아 가는 역할 담당(Enumeration(1.1), Iterator, ListIterator)
'객체의 모임'을 저장하기 위한 클래스의 최상위 자료형으로 List 인터페이스와 Set 인터페이스로부터 유도
컬렉션 내에서 adding, clearing, comparing, retaining와 같은 동작을 모든 컬렉션들이 포함
컬렉션은 각각의 요소에 접근할 수 있도록 Iterator(반복자)라고 불리우는 인터페이스와 객체를 얻을 수 있는 메소드 제공
컬렉션 인터페이스의 이외에도 컬렉션에 사이즈, 해쉬코드, 빈 상태인지 검사하는 동작들을 제공함
용량이 부족할 시 자동 증가
객체를 더하기 위한 메소드 : add, addAll
내용을 조사하기 위한 메소드 : contains, containsAll, isEmpty, size
객체를 제거하기 위한 메소드 : clear, remove, removeAll
배열도 전환하기 위한 메소드 : toArray
반복자로 전환하기 위한 메소드 : iterator
Collection에 데이터 추가 : addAll(Collection<? super T> c, T... a)
검색 및 정렬, 복사 : binarySearch, indexOfSubList, lastIndexOfSubList, sort, copy, nCopies
연산 : max, min, frequency, reverse, rotate, shuffle(임의로 난수를 발생시켜 섞음), singleton(set을 만들어 줌), replaceAll, swap
Enumeration : enumeration, list(Enumeration enumeration)
sequence로 요소들을 유지 관리.
Collection의 하위 인터페이스.
Collection의 메소드를 포함해 중간 추가, 삭제가 포함됨.
메소드가 추가되어 구현됨.
ArrayList, LinkedList가 대표적인 구현 클래스.
Vector, Stack 클래스들은 J2SE1.0, J2SE1.1에서 많이 사용됨
Array로 부터 List 생성 : List list = Array.asList("text1", "text2", "text3"); //여기서 add 함수 쓰면 에러 남!
: List의 크기 변경이 가능한 배열
내부적인 동작은 Vector 클래스와 유사
ArrayList의 생성자 : public ArrayList(), public ArrayList(int initialCapacity), public ArrayList(Collection c)
특징적인 메소드 : public void ensureCapacity(int capacity), public void trimToSize()
: ArrayList가 하듯이 List Interface를 구현
ArrayList보다 중간에 요소를 삭제, 삽입에 유리
무작위로 액세스 할 땐 불리.
LinkedList는 queue, stack, deque로써 확장되는 메소드를 가짐.
생성자 : LinkedList(), LinkedList(Collection c)
: 임의의 컬렉션 클래스에서 구성원 객체를 차례로 검색하며 경우에 따라 제거할 수 있게 함
반복자에 관련된 인터페이스의 각각의 특징 :
Collection의 하위 인터페이스
구성원 객체로 중복된 객체를 허용하지 않음
중복된 객체를 허용하지 않으므로 null이 안 됨
각 객체 값에 대해 하나의 인스턴스만 저장
HashSet, TreeSet(정렬 가능)이 대표적인 클래스
하나의 추가된 기능 강황를 가진 클래스로 HashSet과 유사
정렬된 컬렉션(sorted collection)
항목을 원하는 순서로 컬렉션 내에 추가할 수 있으며, 컬렉션을 반복(Iterator)할 때 값들은 자동적으로 정렬된 순서로 제공
정렬은 트리 데이터 구조에 의해서 이뤄짐
항목이 트리에 추가될 때마다 적당히 정렬된 곳에 위치하므로 iteraotr는 항상 정렬된 순서로 항목들을 방문
TreeSet의 생성자 : TreeSet(), TreeSet(Collection elements)
: 정렬을 위해 객체를 비교하므로 이를 위해 추가되는 항목들은 Comparable 인터페이스를 구현했다고 가정
: Key와 Value 쌍을 저장하고 있으며, key 보유시 이에 해당하는 값을 찾을 수 있도록 구성(set의 장단점과 비교)
Map을 위한 일반 목적의 클래스 :
자바 1.0, 1.1의 Dictionary 클래스 대신에 Map 인터페이스를 사용하는 것이 더 바람직함.
: 항목(Key-Value)의 추가, 제거를 위한 메소드
key 값을 기준으로 key와 value 쌍의 오름차순 정렬 유지
key 값의 비교 :
모든 key 객체의 클래스가 comparable 인터페이스 구현, Comparator로 SortedMap이 생성, 모든 key 값이 이 Comparator로 비교 가능.
메소드 :
: 해쉬 기법을 사용해 구현되고 구성원의 개수에 상관없이 평균적으로 일정한 실행 속도 제공
key와 value 모두 null 값 허용.
생성자 : HashMap(), HashMap(int initialCapacity), HashMap(int initialCapacity, float localFactor), HashMap(Map t)
메소드 : Object clone()
:key 값을 기준으로 KEY와 VALUE 쌍의 오름차순 정렬 유지
Stream : TCP 프로토콜에서 네트워크를 원하는 상대방 사이에 통신을 위한 데이터 교환을 하는 방식에서 유래.
TCP 프로토콜은 네트워크에 가상 경로 설정, 그 경로에 데이터를 바이트로 흘려 보내는 방법이 스트림. -> Java에선 이 방식 그대로 I/O에 적용하여 사용.