반응형
컬렉션 프레임워크
기존 배열(크기 고정)
public class Main {
public static void main(String[] args) {
//컬렉션 프레임워크(List, Set, Map) -> 원하는 만큼 데이터를 추가하거나 삭제할 수 있음
int[] array = new int[3]; // 배열 -> 크기 고정
array[0] = 1;
array[1] = 2;
array[2] = 3;
}
}
- 컬렉션 프레임워크를 사용하면 원하는 만큼 데이터를 추가하거나 삭제할 수 있다.
ArrayList
[예시] 수강신청 선착순 5명
추가, 조회, 삭제
public class Main {
public static void main(String[] args) {
//컬렉션 프레임워크(List, Set, Map)
ArrayList<String> list = new ArrayList<>();
//데이터 추가
list.add("손흥민");
list.add("박주영");
list.add("황희찬");
list.add("이강인");
list.add("김민재");
//데이터 조회(인덱스 기준)
System.out.println(list.get(0) + " " + list.get(1) + " "
+ list.get(2) + " " + list.get(3) + " " + list.get(4));
System.out.println("-------------------------");
//데이터 삭제(이강인 부상)
System.out.println("신청 학생 수 (삭제 전) : " + list.size()); //5
list.remove("이강인");
System.out.println("신청 학생 수 (삭제 후) : " + list.size()); //4
//삭제한 인덱스에 해당하는 데이터
System.out.println(list.get(3)); //김민재
System.out.println("-------------------------");
//데이터 삭제(맨 마지막 인덱스 삭제)
System.out.println("남은 학생 수 (삭제 전) : " + list.size());
list.remove(list.size() - 1);
System.out.println("남은 학생 수 (삭제 후) : " + list.size());
System.out.println("-------------------------");
//순회
for (String s : list) {
System.out.print(s + " ");
}
}
}
결과
손흥민 박주영 황희찬 이강인 김민재
-------------------------
신청 학생 수 (삭제 전) : 5
신청 학생 수 (삭제 후) : 4
김민재
-------------------------
남은 학생 수 (삭제 전) : 4
남은 학생 수 (삭제 후) : 3
-------------------------
손흥민 박주영 황희찬
변경, 확인, 전체 삭제, 정렬
public class Main {
public static void main(String[] args) {
//컬렉션 프레임워크(List, Set, Map)
ArrayList<String> list = new ArrayList<>();
//데이터 추가
list.add("손흥민");
list.add("박주영");
list.add("황희찬");
list.add("이강인");
list.add("김민재");
//변경 (수강권 양도)
System.out.println("수강권 양도 전 : " + list.get(0));
list.set(0, "정우영");
System.out.println("수강권 양도 후 : " + list.get(0));
System.out.println("-------------------------");
//확인(index)
System.out.println(list.indexOf("황희찬"));
//확인(선착순 5명 내에 포함 여부)
if (list.contains("황희찬")) {
System.out.println("수강 신청 성공");
}
if (!list.contains("황희찬")) {
System.out.println("수강 신청 실패");
}
//전체 삭제
list.clear();
if (list.isEmpty()) {
System.out.println("학생 수 : " + list.size());
System.out.println("리스트가 비었습니다.");
}
System.out.println("-------------------------");
//다음 학기 시작
list.add("김승규");
list.add("이청용");
list.add("기성용");
list.add("김남일");
list.add("이운재");
//정렬
Collections.sort(list);
//순회
for (String s : list) {
System.out.print(s + " ");
}
}
}
결과
수강권 양도 전 : 손흥민
수강권 양도 후 : 정우영
-------------------------
2
수강 신청 성공
학생 수 : 0
리스트가 비었습니다.
-------------------------
기성용 김남일 김승규 이운재 이청용
LinkedList
추가, 조회
public class Main {
public static void main(String[] args) {
//LinkedList
LinkedList<String> list = new LinkedList<>();
//데이터 추가
list.add("손흥민");
list.add("박주영");
list.add("황희찬");
list.add("이강인");
list.add("김민재");
//데이터 조회(index)
System.out.println(list.get(0) + " " + list.get(1));
System.out.println(list.getFirst() + " " + list.getLast());
System.out.println("----------------------------");
//추가
//처음에 추가
list.addFirst("차두리");
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("----------------------------");
//마지막에 추가
list.addLast("구자철");
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("----------------------------");
//원하는 위치에 값 추가
System.out.println("추가 전 1번 : " + list.get(1));
list.add(1, "설기현");
System.out.println("추가 후 1번 : " + list.get(1));
System.out.println("추가 후 2번 : " + list.get(2));
}
}
결과
손흥민 박주영
손흥민 김민재
----------------------------
차두리 손흥민 박주영 황희찬 이강인 김민재
----------------------------
차두리 손흥민 박주영 황희찬 이강인 김민재 구자철
----------------------------
추가 전 (index 1) : 손흥민
추가 후 (index 1) : 설기현
추가 후 (index 2) : 손흥민
변경, 확인, 삭제
public class Main {
public static void main(String[] args) {
//LinkedList
LinkedList<String> list = new LinkedList<>();
//데이터 추가
list.add("손흥민");
list.add("박주영");
list.add("황희찬");
list.add("이강인");
list.add("김민재");
//삭제
System.out.println("남은 사람 수(삭제 전) : " + list.size());
list.remove(list.size() - 1);
System.out.println("남은 사람 수(삭제 후) : " + list.size());
System.out.println("----------------------------");
//첫 번째 사람과 마지막 사람이 부상 아웃
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("----------------------------");
System.out.println("남은 사람 수(삭제 전) : " + list.size());
list.removeFirst(); //처음 데이터
list.removeLast(); //마지막 데이터
System.out.println("남은 사람 수(삭제 후) : " + list.size());
System.out.println("----------------------------");
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("----------------------------");
//변경
list.set(0, "백승호");
System.out.println(list.get(0));
System.out.println("----------------------------");
//확인
System.out.println(list.indexOf("박주영"));
if (list.contains("박주영")) {
System.out.println("수강 신청 성공");
}
if (!list.contains("박주영")) {
System.out.println("수강 신청 실패");
}
System.out.println("----------------------------");
//전체 삭제
list.clear();
if (list.isEmpty()) {
System.out.println("사람 수 : " + list.size());
System.out.println("리스트가 비었습니다.");
}
System.out.println("----------------------------");
//정렬
list.add("손흥민");
list.add("박주영");
list.add("황희찬");
list.add("이강인");
list.add("김민재");
Collections.sort(list);
for (String s : list) {
System.out.print(s + " ");
}
}
}
결과
남은 사람 수(삭제 전) : 5
남은 사람 수(삭제 후) : 4
----------------------------
손흥민 박주영 황희찬 이강인
----------------------------
남은 사람 수(삭제 전) : 4
남은 사람 수(삭제 후) : 2
----------------------------
박주영 황희찬
----------------------------
백승호
----------------------------
-1
수강 신청 실패
----------------------------
사람 수 : 0
리스트가 비었습니다.
----------------------------
김민재 박주영 손흥민 이강인 황희찬
Set
- 순서 보장 X, 중복 허용 X(자동으로 중복 제거)
- 순서 보장이 필요할 때는 LinkedHashSet 사용
HashSet, LinkedHashSet
public class Main {
public static void main(String[] args) {
//세트
HashSet<String> set = new HashSet<>();
//데이터 추가
set.add("삼겹살");
set.add("쌈장");
set.add("음료");
set.add("소금");
set.add("후추");
set.add("삼겹살");
set.add("깻잎");
set.add("상추");
set.add("삼겹살");
System.out.println("총 구매 상품 수 : " + set.size());
//순회
for (String s : set) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("---------------------");
//확인
if (set.contains("삼겹살")) {
System.out.println("삼겹살 사러갑니다.");
}
System.out.println("---------------------");
//삭제
System.out.println("총 구매 상품 수(삼겹살 구매 전) : " + set.size()); //7
set.remove("삼겹살");
System.out.println("총 구매 상품 수(삼겹살 구매 후) : " + set.size()); //6
System.out.println("---------------------");
//전체 삭제
set.clear();
if (set.isEmpty()) {
System.out.println("남은 구매 상품 수 : " + set.size());
System.out.println("집으로 돌아갑니다.");
}
System.out.println("---------------------");
//세트: 중복 허용 X, 순서 보장 X -> LinkedHashSet은 순서 보장
HashSet<Integer> intSet = new LinkedHashSet<>();
intSet.add(1);
intSet.add(13);
intSet.add(2);
for (Integer i : intSet) {
System.out.print(i + " ");
}
}
}
결과
총 구매 상품 수 : 7
소금 쌈장 깻잎 음료 후추 상추 삼겹살
---------------------
삼겹살 사러갑니다.
---------------------
총 구매 상품 수(삼겹살 구매 전) : 7
총 구매 상품 수(삼겹살 구매 후) : 6
---------------------
남은 구매 상품 수 : 0
집으로 돌아갑니다.
---------------------
1 13 2
Map
- Key, Value 쌍으로 이루어진 자료형
- 순서 보장 X, Key 값의 중복 허용 X
- 순서를 보장하고 싶으면 LinkedHashMap을 사용
hashMap
public class Main {
public static void main(String[] args) {
//맵(Key, Value)
HashMap<String, Integer> map = new HashMap<>();
//데이터 추가
map.put("아자르", 10);
map.put("토레스", 5);
map.put("베일", 3);
map.put("호날두", 12);
System.out.println("총 인원 : " + map.size());
System.out.println("-----------------------------");
//조회
System.out.println("아자르의 골 : " + map.get("아자르"));
System.out.println("토레스의 골 : " + map.get("토레스"));
System.out.println("베일의 골 : " + map.get("베일"));
System.out.println("-----------------------------");
//확인
if (map.containsKey("호날두")) {
int point = map.get("호날두");
map.put("호날두", ++point);
System.out.println("호날두의 이번 시즌 골 : " + map.get("호날두"));
}
if (!map.containsKey("호날두")) {
map.put("호날두", 1);
System.out.println("호날두의 시즌 첫번째 골(1)");
}
//삭제
map.remove("아자르");
System.out.println(map.get("아자르"));
//전체 삭제
map.clear();
if (map.isEmpty()) {
System.out.println("남은 선수 : " + map.size());
System.out.println("시즌 종료");
}
System.out.println("-----------------------------");
//새로운 시즌 시작
map.put("아자르", 10);
map.put("토레스", 5);
map.put("베일", 3);
map.put("호날두", 12);
//Key 확인
for (String key : map.keySet()) {
System.out.print(key + " ");
}
System.out.println();
System.out.println("-----------------------------");
//Value 확인
for (int value : map.values()) {
System.out.print(value + " ");
}
System.out.println("-----------------------------");
//Key & Value 함께 확인
for (String key : map.keySet()) {
System.out.println("선수명 : " + key + " " + map.get(key) + "골");
}
System.out.println("-----------------------------");
//맵: 중복 X, 순서 X -> 마지막에 업데이트한 값으로 출력됨
map.put("아자르", 15);
map.put("아자르", 22);
map.put("아자르", 37);
for (String key : map.keySet()) {
System.out.println("선수명 : " + key + " " + map.get(key) + "골");
}
}
}
결과
총 인원 : 4
-----------------------------
아자르의 골 : 10
토레스의 골 : 5
베일의 골 : 3
-----------------------------
호날두의 이번 시즌 골 : 13
null
남은 선수 : 0
시즌 종료
-----------------------------
아자르 토레스 베일 호날두
-----------------------------
10 5 3 12 -----------------------------
선수명 : 아자르 10골
선수명 : 토레스 5골
선수명 : 베일 3골
선수명 : 호날두 12골
-----------------------------
선수명 : 아자르 37골
선수명 : 토레스 5골
선수명 : 베일 3골
선수명 : 호날두 12골
Iterator
- List와 Set 같은 데이터를 순회하는 것
- 커서 위치에 해당하는 글자를 가져온다
- 데이터를 확인 후 필요없는 데이터는 바로 삭제 가능
public class Main {
public static void main(String[] args) {
//이터레이터(iterator)
List<String> list = new ArrayList<>();
//List는 인터페이스, ArrayList는 List를 구현한 클래스
list.add("정해인");
list.add("(알 수 없음)");
list.add("송강호");
list.add("(알 수 없음)");
list.add("남궁민");
list.add("(알 수 없음)");
list.add("조지훈");
list.add("(알 수 없음)");
list.add("하정우");
list.add("(알 수 없음)");
for (String s : list) {
System.out.print(s + " ");
}
System.out.println();
System.out.println("-------------------------");
Iterator<String> iterator = list.iterator();
//커서 이동
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println("-------------------------");
iterator = list.iterator(); //커서를 처음 위치로 이동
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
System.out.println("-------------------------");
iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (s.contains("(알 수 없음)")) {
iterator.remove(); //삭제
}
if (!s.contains("(알 수 없음)")) {
System.out.print(s + " ");
}
}
System.out.println();
System.out.println("-------------------------");
//Set
HashSet<String> set = new HashSet<>();
set.add("호날두");
set.add("메시");
Iterator<String> itSet = set.iterator();
while (itSet.hasNext()) {
System.out.println(itSet.next());
}
System.out.println();
System.out.println("-------------------------");
//Map
HashMap<String, Integer> map = new HashMap<>();
map.put("호날두", 10);
map.put("메시", 15);
// map.iterator() -> 제공되지 않음
//Key iterator 적용
Iterator<String> itKey = map.keySet().iterator();
while (itKey.hasNext()) {
System.out.print(itKey.next() + "\t");
}
System.out.println();
System.out.println("-------------------------");
//Value iterator 적용
Iterator<Integer> itValue = map.values().iterator();
while (itValue.hasNext()) {
System.out.print(itValue.next() + "\t\t");
}
System.out.println();
System.out.println("-------------------------");
//Key, Value 함께 iterator
Iterator<Map.Entry<String, Integer>> itMap = map.entrySet().iterator();
while (itMap.hasNext()) {
System.out.println(itMap.next());
}
결과
정해인 (알 수 없음) 송강호 (알 수 없음) 남궁민 (알 수 없음) 조지훈 (알 수 없음) 하정우 (알 수 없음)
-------------------------
정해인
(알 수 없음)
송강호
(알 수 없음)
-------------------------
정해인 (알 수 없음) 송강호 (알 수 없음) 남궁민 (알 수 없음) 조지훈 (알 수 없음) 하정우 (알 수 없음)
-------------------------
정해인 송강호 남궁민 조지훈 하정우
-------------------------
호날두
메시
-------------------------
호날두 메시
-------------------------
10 15
-------------------------
호날두=10
메시=15
참고자료
반응형
'Java' 카테고리의 다른 글
[Java] private 생성자의 사용 이유, final, 자바 메모리 구조 (0) | 2023.10.25 |
---|---|
[Java] 익명클래스, 람다와 스트림 (1) | 2023.10.11 |
[Java] 제네릭스(Generics) (0) | 2023.10.11 |
[Java] 람다식(Lambda Expression)과 함수형 인터페이스(Functional Interface) (0) | 2023.09.10 |
[Java] 함수형 프로그래밍(Functional Programming) (0) | 2023.09.08 |