JAVA 26강_컬렉션 프레임워크

YEONG EUN LEE (Chloe)·2024년 1월 4일

JAVA 기초

목록 보기
32/42

컬렉션 프레임워크(Collection Framework):

한꺼번에 많은 데이터들을 처리하기 위한 구조, 형식을 제공하는 것

컬렉션프레임워크 형식:
자료형명 <자료형명 (클래스급이상만 적을  있음. ex)Integer, String)>
List<Car>
**컬렌션프레임워크는 제네릭기반의 자료형이므로 반드시 요소의 자료형은 클래스급 이상의 자료형으로 지정해주어야 한다.

#인터페이스:

Collection 인터페이스가 조상인터페이스임
List 인터페이스 -> ArrayList클래스, LinkedList, Vector, stack , Queue
=> 배열객체가 보완되어 나온 자료형, 방구조를 변경할 수 있다.
=> 중복값을 가질 수 있다. => 인덱스가 있기 때문에(순서가 있다.)

Collection 인터페이스가 조상인터페이스임
Set 인터페이스 -> HashSet클래스, TreeSet클래스
=> 리스트와 비슷하지만 중복값을 가질 수 없다.
=> 순서가 없다. (인덱스가 존재하지 않음)

Iterator 인터페이스가 조상 인터페이스임.
Map 인터페이스 -> HashMap 클래스, TreeMap클래스
=> Key와 Value의 쌍으로 이루어진 자료형
=> 키는 무조건 문자열자료형으로(String) 지정해 준다.
=> 중복값으 가질 수 있지만, 중복키는 불가능하다.
=> 순서가 없다.(인덱스가 존재하지 않음)

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry; // 생략불가

class Test{}

public class ColEx07 {

	public static void main(String[] args) {
		HashMap<String, Integer> hm = new HashMap<>();
		// key, value로 입력이 가능
		hm.put("hello",123);
		hm.put("world",345);
		// key를 null로 할 수 있고 value도 null로 할 수 있다.
		hm.put(null,555);
		hm.put("nullKey",null);
		System.out.println(hm + "\n");
		for(String key : hm.keySet()) {
			System.out.println("key : " + key + ", value : "+hm.get(key));
		}
		//entrySet 메서드는 key, value를 볼 수 있게 해준다.
		for(Entry<String, Integer> s : hm.entrySet()) { // entrySet 쌍으로 값을 떼오는 함수임.
			System.out.println(s.getKey() + ", " + s.getValue());
		}
		
		LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>(); // LinkedHashMap은 순서를 가지고 있음.
		lhm.put("hello", 123);
		lhm.put("world", 345);
		// key를 null로 할 수 있고 value도 null로 할 수 있다.
		lhm.put(null, 555);
		lhm.put("nullKey", null);
		lhm.put("world", 777); // 마지막 값으로 저장됨. 중복으로 작성할 수 있음. HashMap은 안되나봄.
		System.out.println(lhm + "\n");
		
		for(String key : lhm.keySet()) {
			System.out.println("key : " + key + ", value : " + lhm.get(key));
		}
		
		//entrySet 메서드는 key, value를 볼 수 있게 해준다.
		for(Entry<String, Integer> s : lhm.entrySet()) {
			System.out.println(s.getKey() + ", " + s.getValue());
		}

	}

}
import java.util.HashMap;
import java.util.Scanner;

public class ColEx06 {

	public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>(); // null?
		map.put("castello","1234"); // map은 순서가 없음
		map.put("java","1111");
		map.put("lang","1234");
		
		Scanner s = new Scanner(System.in);
		
		while(true) {
			System.out.println("id와 password를 입력해주세요");
			System.out.print("id : ");
			String id = s.nextLine().trim();
			
			System.out.print("password : ");
			String password = s.nextLine().trim();
			System.out.println();
			
			if(!map.containsKey(id)) { // 1항 연산자.
				System.out.println("입력하신 id는 존재하지 안습니다. 다시 입력해주세요. \n");
			}else {
				if(!map.get(id).equals(password)) {
					System.out.println("입력하신 id는 존재하지 안습니다. 다시 입력해주세요. \n");
				}else {
					System.out.println("id와 비밀번호가 일치합니다.");
					break;
					}
			}
	}
}
}
public class ColEx05 {

	public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("one", "하나"); // Key가 인덱스 역할을 함.
		// key 중복값을 가져올 수 있음. value는 중복값을 가질 수 있음.
		map.put("two", "둘");
		map.put("three", "셋");
		map.put("four", "넷");
		map.put("five", "다섯");
		
		Set<String> keys = map.keySet(); // 순서가 없어서 중복값을 가질 수 없음.
		Iterator<String> iter = keys.iterator(); // 직렬로 나열되어있는 것만 iterator를 사용할 수 있음.
		
		while(iter.hasNext()) {
			String key = iter.next();
			System.out.printf("key : %s\t value: %s\n", key, map.get(key));
		}
		
		Collection<String> value = map.values();
		// 방법1
		for(String s: value) {
			System.out.printf("value : %s \n", s);
		}
		// 방법2
		iter = value.iterator();
		while(iter.hasNext()) {
			System.out.printf("value : %s\n",iter.next());
		}
		
		
	}

}
import java.util.ArrayList;
import java.util.Iterator;

public class CollEx04 {

	public static void main(String[] args) {
		ArrayList<Student> list = new ArrayList<Student>();
		list.add(new Student("자바왕", 1,1));
		list.add(new Student("자바짱", 1,2));
		list.add(new Student("홍길동", 2,1));
		list.add(new Student("전우치", 2,2));

		Iterator<Student> it = list.iterator();
		
		while(it.hasNext()) {
			Student s = it.next();
			System.out.println(s.name + " " + s.ban + "반 " + s.no + "번");
		}
		
	}

	
	public static class Student{
		String name = "";
		int ban;
		int no;
		
		Student(){}
		Student(String name, int ban, int no){
		
		this.name = name;
		this.ban = ban;
		this.no = no;}
		
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getBan() {
			return ban;
		}
		public void setBan(int ban) {
			this.ban = ban;
		}
		public int getNo() {
			return no;
		}
		public void setNo(int no) {
			this.no = no;
		}
	}
}
import java.util.ArrayList;

public class ColEx03 {

	public static void main(String[] args) {
//		ArrayList list = new ArrayList();
		ArrayList<String> list = new ArrayList<String>();
		
		list.add("사과");
		list.add("사과");
		list.add("수박");
		list.add("귤");
		list.add("딸기");
		list.add("체리");

		prn(list); // 같은 클래스에 선언된 형제 메소드 이거나 상속받은 클래스의 메소드 이면 이렇게 사용할 수 있음. static이면 이탤릭체!
		
		System.out.println(">> 인덱스 2인 위치에 키위 삽입 <<");
		list.add(2, "키위");
		prn(list);
		
		System.out.println(">> 인덱스 4인 위치에 포도로 변경 <<");
		list.set(4, "포도");
		prn(list);
		
		System.out.println(">> 인덱스 1인 위치에 데이터를 제거 <<");
		list.remove(1); // 방칸수도 줄어들고 인덱스도 변경됨.
		prn(list);
		
		System.out.println(">> 사과 데이터를 찾아서 제거 <<");
		list.remove("사과"); 
		prn(list);
		
		System.out.println(">> 원하는 데이터를 찾아서 제거 <<");
		ArrayList<String> apple = new ArrayList<String>();
		apple.add("사과");
		apple.add("수박");
		list.removeAll(apple); // 모든 사과만 지우는 것이 아니라 제일 처음 마주친 값만 삭제
		prn(list);
		
		
		
	}
	
	 static void prn(ArrayList list) {
		 for(int i = 0; i < list.size(); i++) {
			 System.out.print(list.get(i) + "\t");
		 }
		 System.out.println("\n");
	 }

}
import java.util.*;

public class ColEx02 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		
		list.add("사과");
		list.add("바나나");
		list.add("귤");
		list.add("오렌지");
		list.add("바나나");
		list.add(0, "바나나"); // 해당 인덱스에 값을 채우고 한칸씩 자리를 미룸.
		
		System.out.println("요소의 개수 : " + list.size());
		
		System.out.println(">> Iterator 객체로 요소 얻기 <<");
//		Iterator elements = list.iterator(); // 1.5이전
		Iterator<String> elements = list.iterator();
		while(elements.hasNext()) {
//			String str = (String) elements.next(); // 1.5 이전
			String str = elements.next();
			String str1 = elements.next();
			System.out.print(str + " " + str1 +"\t");
		}
		System.out.println("\n");
		System.out.println(">> get 메소드로 요소 얻기 <<");
		for(int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i) + "\t"); // index 번호로 값을 가져올 때, get을 이용함.
		}
		
		System.out.println();

	}

}

0개의 댓글