컬렉션
✅ 컬렉션 : 자바에서 배열을 더 고도화 시켜서 컬렉션이라는 이름으로 참조형 분류통을 제공
✅ 컬렉션 기능 : 크기 자동조정 / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 / 포함확인 등
✅ 컬렉션 종류 : List, Set, Queue, Map
ArrayList 리스트
리스트 : 순서가 있는 데이터의 집합. 데이터룰 중복 허용하고 배열과 비슷하다.
배열과 다른 점 : 배열은 최초 길이를 알아야 하지만 리스트는 길이를 몰라도 생성할 수 있다.
그래서 배열은 정적 배열이라고 하고 리스트는 크기가 알아서 늘어나는 동적 배열이라고 한다.
✓ 생성 시점에 작은 연속된 공간을 요청해서 참조형 변수를 담아놓는다.
✓ 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장
➡️ 마라탕. 일단 기본 그릇에 많은 재료를 담고 맛있게 먹은 후 모자라면 다른 그릇에 다시 재료 담기!
ArrayList 생성법
✅ 다른 참조형 변수와 똑같이 new 키워드로 생성.
ArrayList<기본형타입> 변수명 = new ArrayList<>();
ArrayList 기능
1. 추가 : add (추가할 값)
2. 수정 : set (수정할 순번, 수정할 값)
3. 삭제 : remove (삭제할 순번)
4. 전체 값 제거 : clear( );
ArrayList<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
// System.out.println(intList.get(0)); // fifo 선입선출
// 2번째 있는 값 2를 변경해보자
// intList.set(1, 10);
// System.out.println(intList.get(1)); // 10
System.out.println(intList.get(0));
// 삭제
intList.remove(0); // 첫번째 값이 1이었는데 삭제되서 2, 3 만 남아서 2가 첫번째 값이 되었다
System.out.println(intList.get(0)); // 2
System.out.println("클리어 전");
System.out.println(intList.toString()); // [2, 3]
intList.clear();
System.out.println("클리어 후");
System.out.println(intList.toString()); // [] 빈 배열
LinkedList 링크드리스트
✓ 메모리에 남는 공간을 요청해서 여기 저기 나누어서 실제 요소를 담아놓는다.
✓ 실제 값이 들어있는 공간의 주소값으로 목록을 구성하고 저장한다.
📌 주의점
1. 값을 여기저기 나누어서 저장하기 때문에 조회하려면 나누어져 있는 것을 모아서 조회해서 속도가 느리다.
2. 값을 나누어 놨기 때문에 값을 추가하거나 삭제할 때는 빠르다.
LinkedList 생성법
✅ 다른 참조형 변수와 똑같이 new 키워드로 생성.
LinkedList<기본형타입> 변수명 = new LinkedList<>();
LinkedList 기능
1. 추가 : add (추가할 값)
2. 수정 : set (수정할 순번, 수정할 값)
3. 삭제 : remove (삭제할 순번)
4. 전체 값 제거 : clear( );
LinkedList<Integer> intList = new LinkedList<>();
intList.add(4);
intList.add(10);
intList.add(20);
System.out.println(intList.get(0)); // 4
System.out.println(intList.get(1)); // 10
System.out.println(intList.get(2)); // 20
System.out.println(intList.toString()); // 조회할 때는 속도가 ArrayList보다 현저히 느림
intList.add(200);
System.out.println(intList.toString()); // [ 4, 10, 20, 200 ]
intList.add(2,15);
System.out.println(intList.toString()); // [ 4, 10. 15, 20, 200 ]
intList.set(1,30);
System.out.println(intList.toString()); // [ 4, 30, 15, 20, 200 ]
intList.remove(1);
System.out.println(intList.toString()); // [ 4, 15, 20, 200 ]
Stack 스택
✓ 바구니. 수직으로 값을 쌓아 놓고 뺄 수 있는 자료 구조.
✓ 최근 저장된 데이터를 나열하고 싶거나, 데이터의 중복 처리를 막고 싶을 때 사용.
Stack 생성법
✅ 다른 참조형 변수와 똑같이 new 키워드로 생성.
Stack<기본형타입> 변수명 = new Stack<>()
Stack 기능
1. 추가 : push (추가할 값)
2. 조회 : peek. 최상위에 앃여있는 값, 즉, 제일 마지막에 넣은 값을 조회.
3. 값 꺼내기 : pop. 제일 마지막에 넣은 최상위 값을 꺼냄. 꺼내면 삭제된다.
Stack<Integer> intStack = new Stack<>();
intStack.push(1);
intStack.push(10);
intStack.push(30);
// isEmpty -> 모든 요소가 없으면 반환. !false => true 있는게 없어져야
while (!intStack.isEmpty()) {
System.out.println(intStack.pop()); // 제일 마지막에 집어넣은 데이터부터 꺼내기. 30, 10, 1
}
intStack.push(1);
intStack.push(10);
intStack.push(30);
//peek
System.out.println("-------------------");
System.out.println(intStack.peek()); // 제일 마지막에 넣은 데이터가 출력. 30
System.out.println(intStack.size()); // 스택의 크기 3
Queue 큐
✓ 빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 뺄 수 있는 집합. FIFO(First In First Out)
Queue 생성법
✅ 참조형 변수이지만 new 키워드로 생성할 수 없어서 링크드리스트를 사용한다.
Queue<기본형타입> 변수명 = new LinkedList<>()
Queue 기능
1. 추가 : add (추가할 값)
2. 조회 : peek. 최상위에 앃여있는 값, 즉, 제일 마지막에 넣은 값을 조회.
3. 값 꺼내기 : poll. 첫번째에 넣은 값부터 꺼내기. 꺼내고 나면 삭제된다. pull 인줄 알았는데 poll 이었다.
Queue<Integer> intQueue = new LinkedList<Integer>();
intQueue.add(1);
intQueue.add(5);
intQueue.add(10);
while (!intQueue.isEmpty()) {
System.out.println(intQueue.poll()); // 값을 꺼내기. 1, 5, 10
}
// 다시 값 추가
intQueue.add(1);
intQueue.add(5);
intQueue.add(10);
// peek
System.out.println(intQueue.peek()); // 1. 첫번째 넣은 데이터가 첫번째로 나와야됨
Set 세트
✓ 순서가 없는 대신에 중복을 허용하지 않도록 사용하는 자료 구조. 그냥 중학교때의 집합.
✓ 그냥 사용할 수 있고 HashSet, TreeSet으로 응용해서 사용 가능
Set 생성법
✅ 참조형 변수이지만 new 키워드로 생성할 수 없어서 HashSet를 사용한다.
Set<기본형타입> 변수명 = new HashSet<>()
Set 기능
1. 추가 : add (추가할 값)
2. 삭제 : remove. 최상위에 앃여있는 값, 즉, 제일 마지막에 넣은 값을 조회.
3. 값이 있는지 포함 확인 : contains (포함 확인할 값). 포함되어 있으면 true, 없으면 false.
Set<Integer> intSet = new HashSet<>();
intSet.add(5);
intSet.add(9);
intSet.add(1);
intSet.add(12);
intSet.add(1);
intSet.add(12);
for (Integer value : intSet) {
System.out.println(value); // 1, 5, 9, 12. 중복된 값은 제외
}
// contains : 값을 포함하고 있으면 true, 없으면 false
System.out.println(intSet.contains(2)); // false
System.out.println(intSet.contains(5)); // true
}
Map 맵
✓ 키 - 값의 형태로 데이터를 저장하기 때문에 키 값을 기준으로 값을 조회할 수 있다.
✓ Map 의 키는 중복을 허용하지 않는 unique 한 값이다.
Map 생성법
✅ 참조형 변수이지만 new 키워드로 생성할 수 없어서 HashSet를 사용한다.
Map<키 타입, 값 타입> 변수명 = new HashMap<>()
Map 기능
1. 추가 : put (추가할 키 값, 추가할 값)
2. 값 조회 : get (조회할 키 값)
3. 전체 키 조회 : KeySet ( );
4. 전체 값 조회 : values ( );
5. 삭제 : remove (삭제할 키 값)
Map<String, Integer> intMap = new LinkedHashMap<>();
// 키 값 put
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 16); // 중복 key
// key 값 전체 출력
for(String key : intMap.keySet()) {
System.out.println(key); // 일 이 삼
}
for(Integer value : intMap.values()) {
System.out.println(value); // 11 12 16. 삼은 중복 키라서 마지막에 넣은 갑으로 덮어쓰기됨
}
System.out.println(intMap.get("삼")); // 16
⭐ 느낀점과 다음 할 일
월요일이라 기운없고 공부하기 싫다. 그런데 다른 스터디 팀원들은 5주차 강의에서 벌써 4주차 듣고 있다고 한다.. 그래서 더욱 열심히 하기로 했다.
'내배캠_Java 6기 > Java 문법 종합반' 카테고리의 다른 글
20240809_TIL_캠프 4주차 5일_필드와 메서드 (0) | 2024.08.09 |
---|---|
20240809_TIL_캠프 4주차 5일_자바의 객체지향 프로그래밍과 클래스 설계 (1) | 2024.08.09 |
20240726_TIL_캠프 2주차 5일_자료구조 배열 (0) | 2024.07.26 |
20240726_TIL_캠프 2주차 5일_조건문과 반복문 (0) | 2024.07.26 |
20240725_캠프 2주차 4일_연산자 (0) | 2024.07.25 |