TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.
컬렉션
자료구조가 내장되어있는 클래스
자바에서 제공하는 자료구조를 담당하는 "프레임워크"이다.
추가, 삭제, 정렬 등의 기능 처리를 간단하게 해결되어있어서 자료구조적 알고리즘을 구현할 필요가 없다.
java.util 패키지에 포함되어 있다.
*자료구조? 데이터를 메모리에서 구조적으로 처리하는 방법론
배열 말고 컬렉션을 사용하는 이유?
배열 |
컬렉션 |
배열의 크기: |
크기를 꼭 지정할 필요없고 (해도 상관은 없음) 또한 크기가 알아서 늘어난다 -> 크기에 제약이없음 |
배열의 중간 위치에 새로운 데이터를 추가하거나 삭제하는 경우 당겨주거나 늘려주는 작업을 하나씩 코드로써 구현해야 된다. |
중간에 값을 추가하거나 삭제하는 경우, 알고리즘을 직접 구현할 필요 없다. |
해당 자료형 한 가지 타입의 데이터들만 저장 가능 |
여러 타입의 데이터를 저장할 수 있음 (단, 객체 단위로만 저장 가능) |
==>> 변동사항이 없다면 배열을 많이 쓴다. 방대한 데이터들을 보관만 시켜서 조회할 용도로는 배열을 사용한다. |
==>> 방대한 데이터들을 담고 새로운 데이터들이 추가되거나 삭제하는 일이 빈번한 경우 컬렉션을 사용한다.
|
* 컬렉션 종류 (컬렉션의 주요 인터페이스)
1. List 계열
구현 클래스 - *ArrayList/Vector(arraylist이전 버전)/LinkedList
-> 값을 담을 때 value값만 저장/ 순서유지 o / 중복 저장 가능
2. Set 계열
구현 클래스 - HashSet/TreeSet
-> 값을 담을 때 value값만 저장/ 순서 유지 x / 중복된 데이터 저장 불가
3. Map 계열
구현 클래스 - *HashMap/HashTable/TreeMap/ *Properties
-> 값을 담을 때 Key+Value세트로 저장 / 순서 유지 x /
List
자료들을 순차적으로 나열한 자료구조로서 인덱스로 관리되며, 중복해서 객체 저장이 가능하다.
구현 클래스로 ArrayList와 Vector, LinkedList가 있다.
ArrayList컬렉션 표현법
ArrayList<제네릭> 컬렉션명 = new ArrayList(크기);
// 제네릭과 크기는 생략 가능
제네릭
-> 내가 제시한 타입의 객체만 저장하게끔 타입의 제한을 * 제네릭(<>)을 제시하는 이유
* 1. 내가 제시한 타입의 객체만 저장하게끔 타입의 제한을 두기 위해서
* 2. 컬렉션에 저장된 객체를 꺼내서 쓸 때 매번 형 변환하는 절차를 없애기 위해 (가장 메인 이유)
* 3. 보안상의 이유(모든 타입이 다 담길 수 있기 때문에 보안에 취약해진다)
ArrayList의 메소드명 ( E : element 컬렉션에 담길 요소들) |
설명 |
컬렉션명.add(E e); |
리스트의 끝에 해당 전달된 객체를 추가해주는 메소드 |
컬렉션명.add(int index, E e); |
해당 index에 전달된 객체를 추가해주는 메소드 |
컬렉션명.set(int index, E e); |
해당 index에 담긴 값을 전달된 객체로 변경해주는 메소드 (수정메소드) |
컬렉션명.size(); |
해당 리스트안에 담긴 데이터 갯수 |
컬렉션명.get(int index); |
해당 index에 존재하는 객체를 반환해주는 메소드 |
컬렉션명.get(int index).추가getter메소드( ); |
해당 index값의 추가적인 게터메소드호출 |
컬렉션명.subList(int index1, int index2); |
값을 추출해서 List로 반환해주는 메소드 |
컬렉션명.addAll(Collection c); |
컬렉션을 통째로 뒤에 추가해주는 메소드 |
컬렉션명.clear(); |
컬렉션을 비워주는 메소드 |
컬렉션명.isEmpty(); |
컬렉션이 비워있는지 boolean값으로 돌려주는 메소드 |
반복문을 통해서 출력하기
1. for loop문
for(int i=0; i<컬렉션.size(); i++){
System.out.println(list.get(i));
}
-> 인덱스 값으로 활용 가능
2. for each문
for(제네릭타입 변수명 : 컬렉션명) { //ex) Music music : list
System.out.println(list.get(i));
}
-> 인덱스 값 제시하지 않아도 되어서 좀 더 깔끔하다
'Java' 카테고리의 다른 글
별찍기를 해보자; 기본 삼각형, 오른쪽 삼각형, 기본 거꾸로, 오른쪽 거꾸로! (0) | 2021.07.29 |
---|---|
[Java] GUI? 자바로 계산기(프로그램) 만들기, 프레임생성부터 기능적용까지 (0) | 2021.02.01 |
[Java] 입출력 IO? Input/Output, 기반스트림과 보조스트림 (0) | 2021.01.28 |
[Java] java.io.file 클래스를 가지고 파일 만들기 (0) | 2021.01.27 |
[Java] 예외; 에러와 예외 처리하는 방법 (0) | 2021.01.20 |
댓글