배열을 편하게 하기 위해! List
컬렉션 프레임웍, 표준화
Collection - List, Set
Map은 공통 부분이 없어서, 컬렉션에 안 들어감
List 리스트에 받아서 순서대로 쓰겠다
ArrayList는 웹 접근
Map 검색(대량 데이터에는 ㄴㄴ) 채팅프로그램, ip번호와 아이디
List-ArrayList, LinkedList
ArrayList-Vector 순서O 중복O
데이터 저장 공간 ) 배열 사용
Vector 멀티쓰레드 동기화 되어 있음
ArrayList는 동기화X - 동기화 메서드가 있긴 함Collection에
용량 변경하려면 복사 후 용량 큰 배열 만들어서 새로 붙여넣기 해야함
LinkedList-순서O 중복O
ArrayList와 비슷하나 메모리 저장법이 다름(연결)
불연속적으로 존재하는 데이터를 서로 연결해줌,
추가 삭제가 빠릅니다~~~
자바로만 했을 땐, LinkedList가 더 빠름
웹은 ArrayList~~~
데이터 추가 add()
데이터 수정 set()
해당하는 데이터가 있는지 없는지 contains()
어느 위치에 뭐가 있는지? indexOf()
해당하는 데이터 하나 삭제 remove()
모든 데이터 전체 삭제 removeAll() / clear()
Set- 순서X 중복X (로또 당첨 번호) 집합
Map- 순서O 키중복X 밸류중복O
웹에서는 HashMap
추가,검색,수정,삭제,전체출력,데이터초기화,종료 //중복값 안 받기 :) 비교, for문
Collection 과 Map
ㄴList,Set ㄴ얘는 따로
Collection 은 똑같은 방식으로 쓸 수 있음(메소드가 하는 일이 같음, 예) add() )
Collection -> 값만 저장
Map -> 키와 값 같이 저장(key, value)
Map은 데이터가 많이 들어가면 불편,
대량의 데이터는 ArrayList를 많이 씀..:(
예습--------------------------------
<메서드에 예외 선언> - 메서드 선언부에 throws 사용
void method() throws Exception1, Exception2 ... { 내용 }
상속 관계까지 고려해야 됨, throws Exception -> 모든 종류 예외 발생 가능성
메서드에 메서드 내에서 발생 가능성이 있는 예외를 선언부에 명시하면
메서드 사용자가 이에 대한 처리를 하게 강요 -> 견고한 프로그램 작성 가능
일부러 throw new Exception("파일 이름 유효X") 해서 예외 생성도 가능!
<finally 블럭> - 얘는 무조건 실행되어야 해 !
try - catch - finally 순서로 구성 //finally는 생략 가능하긴 함
try { } catch(Exception e) { } finally { 예외 발생 여부와 상관 없이 실행되어야 하는 문장 }
<사용자 정의 예외> - 필요하면 예외 만들기 // 상위 예외 클래스 상속
class MyException extends Exception {
private final int ERR_CODE; //생성자로 초기화
MyException(String msg, int errCode) { //메시지+코드 생성자
super(msg);
ERR_CODE = errCode;
}
MyException(String msg) {
this(msg, 100); //ERR_CODE를 100(기본값)으로 초기화
}
public int getErrCode() { //에러코드 얻는 메소드
return ERR_CODE; //주로 getMessage() 와 함께 사용
}
}
보통 RuntimeException을 상속 받아서 만든다
걍 Exception 상속 받으면 꼭 예외처리를 해줘야 하기 때문
<예외 되던지기> - 한 메서드에 발생할 수 있는 예외가 여러개라면?
선언부에 지정하여 호출한 메서드에 나눠 처리
하나의 예외도 두 번 처리(발생메서드 + 호출메서드 양쪽에서)
1.예외 발생 가능성 있는 메서드에서 try-catch로 예외 처리
2.catch에서 예외처리 후, throw 문으로 다시 예외 발생
3.예외는 호출한 메서드로 전달, 호출한 메서드에서 try-catch로 예외 처리
*메서드 선언부에 throws 예외 선언 잊지 말기!
<연결된 예외> - 한 예외가 다른 예외를 발생 시킨다
예외A가 예외B를 발생 시키면?
예외A는 원인 예외
try { //인스톨 하는 메서드(코드)
startInstall(); //여기에서 SpaceException 발생
copyFiles();
} catch(SpaceException e) {
InstallException ie = new InstallException("설치 중 예외 발생"); //예외 생성
ie.initCause(e); //InstallException의 원인 예외를 SpaceException으로
throw ie; //InstallException 발생
}
참고)Throwable은 error / Exception의 제일 위
Throwable initCause(Throwable cause) 지정 예외를 원인 예외로 등록
Throwable getCause() 원인 예외 반환
연결 된 예외 쓰는 이유?
ㄴ 여러가지 예외를 큰 분류의 예외로 묶어서 다루기 위해
ㄴ ckecked예외를 unchecked 예외로 바꾸기 위해
<Iterator, ListIterator, Enumeration> - 컬렉션 저장 요소 접근
Iterator : 컬렉션에 저장된 요소에 접근
ListIterator : Iterator에 양방향 조회 기능 추가(List만 사용 가능)
Enumeration : Iterator 구버전
Iterator은 인터페이스 Collection 안에
"Iterator을 구현한 클래스의 인스턴스 반환하는 iterator()를 정의한 것"
List나 Set 인터페이스를 구현한 컬렉션에는 iterator()가 작성 되어 있음
List list = new ArrayList();
Iterator it = list.iterator();
while(it.hasNext()) { //boolean hasNext() 읽어올 요소가 있는지 확인
System.out.println(it.next()); } //Object next() 다음 요소 읽어옴
//요소 다 읽으면 초기화해야 다시 읽을 수 있음
//이미 읽은 거 또 불러와서 읽으면 못 읽음
<Map과 Iterator> - 직접 호출 불가
Map인터페이스를 구현한 컬렉션 클래스는 key,value를 쌍으로 저장함
ㄴ iterator() 직접 호출 불가
keySet() 이나 entrySet()으로 키와 값을 각각 Set 형태로 가져와서 호출해야 함
Map map = new HashMap();
Iterator it = map.entrySet().iterator(); //map을 entrySet으로 가져온 후 iterator();
1.Set eSet = map.entrySet();
2.Iterator it = eSet.iterator();
위에 꺼 풀어 쓴 거임
<Comparator와 Comparable> 컬렉션 정렬
Comparator -> compare(o1, o2) //o1과 o2를 비교
Comparable -> compareTo(o) //객체 자신과 o를 비교
- 두 객체가 같으면 0, 왼쪽이 크면 양수(1), 오른쪽이 크면 음수(-1)
Comparable -> 기본 정렬 구현 (1,2,3...)
Comparator -> 다른 기준 정렬(3,2,1....)
static void sort(Object[] a) //Comparable 정렬(기본)
static void sort(Object[] a, Comparator c) //Comparator로 지정 기준 정렬
<HashSet> - Set인터페이스 대표 컬렉션
중복X 순서X - 순서 O 하고 싶으면 LinkedHashSet
add / addAll로 저장, 중복값이 있다면 false 반환
Collections.sort(List list)로 정렬 가능하지만
List로 바꿔야 정렬 가능
List list = new LinkedList(set) //LinkedList(Collection c) ->List로 바꿈
Collections.sort(list)
인스턴스의 값이 같은데 다르게 인식해서 중복 저장 되면?
equals / hashCode 오버라이딩 (이클립스에 기능 있음)
<HashMap> - Map인터페이스 구현
키(key)와 값(value)를 묶어 하나의 데이터(entry)로 저장
많른 양의 데이터 검색에 뛰어난 성능!
key와 value는 (Object, Object) //키는 보통 String을 대문자, 소문자로 통일해서 사용하긴 함
키(key) 중복X 유일한 값 - 지정된 값을 찾는데 사용되니 유일해야 함
값(value) 중복O
중복된 키로 저장하면 값만 새로운 값으로 덮어씀
<Collections의 메서드> - 동기화
컬렉션과 관련 된 메서드 제공
Collection -> 인터페이스
Collections -> 클래스
fill() , copy() , sort() , binarySearch() ....
컬렉션 동기화 메서드 synchronized
변경 불가(읽기 전용) unmodifiable
싱글톤(단 하나의 객체 저장) singleton
단일 컬렉션(한종류의 객체만) checked
<컬렉션 클래스 정리, 요약>
ArrayList
ㄴ 배열기반/데이터 추가 삭제 불리(순차적은 빠름)/임의 요소 접근성 뛰어남
LinkedList
ㄴ 연결기반/데이터 추가 삭제 유리/임의 요소 접근성 좋지 않음
HashMap
ㄴ 배열+연결/추가,삭제,검색,접근성 뛰어남(특히 검색 최강)
TreeMap
ㄴ 연결기반/정렬,검색(특히 검색 범위) 적합/검색 성능은 HashMap보다 아래
Stack
ㄴ Vector을 상속받아 구현
Queue
ㄴ LinkedList가 Queue인터페이스 구현
HashSet
ㄴ HashMap 이용해 구현
TreeSet
ㄴ TreeMap 이용해 구현
LinkedHashMap , LinkedHashSet
ㄴ HashMap과 HashSet에 저장 순서 유지 기능 추가 !
'국비 학원 가서 개발새발' 카테고리의 다른 글
국비학원 13일차) HashMap, Iterator, IO (0) | 2022.10.17 |
---|---|
국비학원 12일차) 예외, Set(HashSet,TreeSet) Iterator //예습:제네릭,IO와 스트림, (1) | 2022.10.14 |
국비학원 10일차) 추상클래스, 인터페이스 // 예습:Collection, List, Stack, Queue (0) | 2022.10.12 |
예습)예외 처리(try-catch) (0) | 2022.10.10 |
Comparable 과 Comparator 차이(익명클래스 사용) (0) | 2022.10.10 |