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

전영덕·2023년 2월 3일
0

Java Study

목록 보기
34/36

1. Collection Framework란

  • 다수의 데이터를 쉽게 처리할 수 있는 표준화 된 방법을 제공하는 클래스들로, 기존 배열형태의 자료 저장에서 좀 더 다양한 데이터들을 저장하기 위한 필수 클래스이다.

2. Collection Framework의 종류

3. HashMap 클래스

  • 데이터에 이름표를 적용하여 저장하기

  • HashMap클래스는 Map 인터페이스를 상속받는 '자료 보관소'이기
    때문에, 암묵적 형변환의 규칙에 따라 Map 형태로 선언하고
    HashMap 형태로 할당한다.

  • 선언과 할당시에 HashMap의 이름표로 사용할 데이터 형(String)과
    HashMap에 저장할 데이터형을 클래스의 이름으로 명시해야 하는데,
    이를 '제너릭스'라 한다.

  • 제너릭스에 명시할 수 있는 데이터 형은 반드시 클래스 이름이여야 하기 때문에 기본 자료형을 보관할 경우 Wrapper 클래스의 이름을 사용해야 한다.

    Map<String, 저장할 데이터의 클래스이름> data =
    new HashMap<String, 저장할 데이터의 클래스이름>();
  • 기존에 저장된 데이터와 중복되는 이름이 저장될 경우, 기존에 저장된 데이터를 덮어 씌우게 된다.

  • 예시

package collection;

import java.util.HashMap;
import java.util.Map;

public class Main01 {

	public static void main(String[] args) {
		// 데이터를 저장할 배열 생성
		// 제너릭 -> <값의 이름, 값의 종류>
		Map<String, Integer> hm = new HashMap<String, Integer>();
		
		// 데이터 추가는 put  메서드 사용
		// -> 중복을 허용하지 않는다.
		hm.put("kor", 90);
		hm.put("math", 100);
		hm.put("eng", 95);
		// 객체를 넣는 것이므로 null 사용가능
		hm.put("kor", null);  
		hm.put("kor", 80);
		
		// 저장된 갯수 얻기
		System.out.println( "hashmap size : " + hm.size());
		
		// 저장된 데이터 꺼내기
		System.out.println( hm.get("kor") );
		System.out.println( hm.get("math") );
		System.out.println( hm.get("eng") );	
	}
}

결과

hashmap size : 3
80
100
95

4. ArrayList

  • 무제한 확장 가능한 배열

  • ArrayList는 List 인터페이스를 상속받은 클래스로, 데이터를 이름표 없이 무제한으로 보관할 수 있다.

  • ArryaList에 추가되는 데이터는 순차적으로 배열과 같은 인덱스 번호를 부여 받는다.

  • 상위 인터페이스 형으로 선언하고 ArrayList클래스로 객체를 할당하며, 선언과 할당 시에는 보관하고자 하는 자료형에 대한 제너릭스를 명시한다.

    List<저장할 데이터의 클래스 이름> list
    = new ArrayList<저장할 데이터의 클래스 이름>();
  • 예시

package collection;

import java.util.ArrayList;
import java.util.List;

public class Main02 {

	public static void main(String[] args) {

		List<Integer> numberList = new ArrayList<Integer>();

		// 데이터추가
		numberList.add(10);
		numberList.add(20);
		numberList.add(30);
		numberList.add(40);
		numberList.add(50);
		numberList.add(60);
		numberList.add(70);
		numberList.add(80);
		numberList.add(90);

		// 추가된 데이터의 수량확인
		int count = numberList.size();
		System.out.println("데이터 크기 : " + count);

		// 5번째 요소의 값 얻기
		int value = numberList.get(4);
		System.out.println("5번째 요소의 값 : " + value);

		// 5번째 요소의 값 삭제
		numberList.remove(4);

		// 하나를 삭제 후, 전체 크기다시 조회
		count = numberList.size();
		System.out.println("데이터 크기 : " + count);

		// 5번째 요소의 값을 다시 얻기
		value = numberList.get(4);
		System.out.println("5번째 요소의 값 : " + value);

		// 5번째 자리에 데이터 추가하기
		numberList.add(4, 123);
		value = numberList.get(4);
		System.out.println("5번째 요소의 값 : " + value);

		// 전체삭제
		numberList.clear();
		count = numberList.size();
		System.out.println("데이터 크기 : " + count);

// 리스트안에 배열될수 있는 것은 Integer뿐만아니라 내가 만들어 놓은 자바 클래스
//(데이터빈즈로 선언해놓은것)요 어레이리스트에 담을 수 있음.
//인티저도 자바가 만들어 놓은 클래스임.
	}
}
데이터 크기 : 9
5번째 요소의 값 : 50
데이터 크기 : 8
5번째 요소의 값 : 60
5번째 요소의 값 : 123
데이터 크기 : 0
  • ArrayList활용
    List를 사용하는 가장 일반적인 방법은 사용자 정의 클래스에 대한 객체를 포함하도록 지정하는 것이다. 일단 멤버 변수부터 클래스부터 만들자.
package collection;

public class Member {

	private String name;
	private String phoneNo;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPhoneNo() {
		return phoneNo;
	}

	public void setPhoneNo(String phoneNo) {
		this.phoneNo = phoneNo;
	}

	public Member(String name, String phoneNo) {
		super();
		this.name = name;
		this.phoneNo = phoneNo;
	}

	@Override
	public String toString() {
		return "Member [name=" + name + ", phoneNo=" + phoneNo + "]";
	}
}
package collection;

import java.util.ArrayList;
import java.util.List;

public class Main03 {

	public static void main(String[] args) {

		List<Member> pList = new ArrayList<Member>();

// 10명의 데이터를 추가하기 (이게 일반적이다. 각 개인 정보는 연관성이 없으니까)
//		pList.add(new Member("회원0", "01012345670"));
//		pList.add(new Member("회원1", "01012345671"));
//		pList.add(new Member("회원2", "01012345672"));
//		pList.add(new Member("회원3", "01012345673"));
//		pList.add(new Member("회원4", "01012345674"));
//		pList.add(new Member("회원5", "01012345675"));
//		pList.add(new Member("회원6", "01012345676"));
//		pList.add(new Member("회원7", "01012345677"));
//		pList.add(new Member("회원8", "01012345678"));
//		pList.add(new Member("회원9", "01012345679"));

		//하지만 귀찮으니까 이렇게 해도되고 Random으로하는 방법도 있음.
		for (int i = 0; i < 10; i++) {
			pList.add(new Member("회원" + i, "0101234567" + i));
		}

		// 출력
		// toString();
		// List에 저장된 데이터를 하나꺼내면, Member 클래스 형의 객체

		for (int i = 0; i < pList.size(); i++) {
			System.out.println(pList.get(i).toString());
		}
	}
}
Member [name=회원0, phoneNo=01012345670]
Member [name=회원1, phoneNo=01012345671]
Member [name=회원2, phoneNo=01012345672]
Member [name=회원3, phoneNo=01012345673]
Member [name=회원4, phoneNo=01012345674]
Member [name=회원5, phoneNo=01012345675]
Member [name=회원6, phoneNo=01012345676]
Member [name=회원7, phoneNo=01012345677]
Member [name=회원8, phoneNo=01012345678]
Member [name=회원9, phoneNo=01012345679]

0개의 댓글