나를 기록하다
article thumbnail
반응형

자바

컬렉션 프레임워크

기존 배열(크기 고정)
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

참고자료

https://www.inflearn.com/course/%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8/dashboard

 

나도코딩의 자바 기본편 - 풀코스 (20시간) - 인프런 | 강의

배움의 즐거움을 알게 해주는 강의. 나도코딩의 자바 기본편을 소개합니다., 빠르고 효율적이면서퀴즈까지 풀 수 있는 자바 강의가 있다? 😮 '너무 재밌어요.가르쳐주시는 짧은 주제마다 응용

www.inflearn.com

 

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...