Collection

haribo·2021년 2월 27일
0

Java

목록 보기
12/17

Why?

배열의 단점 : 길이를 정해놓으면 수정할 수 없이 고정됨.

컬렉션 프레임워크는 그런 문제점을 해결하고자 만들어진 것이라고 보면 됨.

컬렉션 프레임워크란?

  • 다수의 데이터를 쉽게 처리할 수 있는 표준화 된 방법을 제공하는 클래스들로, 기존 배열형태 자료 저장에서 좀 더 다양한 데이터들을 저장하기 위한 필수 클래스이다.
  • 종류 : 리스트(ArrayList, Vector-Stack) / 맵(HashMap, SortedMap) 으로 분류가 된다.
    • 리스트(인터페이스) : 인덱스 값으로 관리, 순서가 있고 중복을 허용한다. (번호를 매기니까 굳이 중복해도 구분 가능하다. 0번째 데이터와 4번째 데이터가 같다 하더라도 부를땐 어차피 몇번째로 부르니까. 배열 생각하면 쉽다)
    • 맵(인터페이스) : 키 값으로 관리, 순서가 없고 중복 허용을 하지 않는다. ( 큰 주머니에 공을 넣는 것. 지도를 펼쳤을때를 보면 쉽다. 순서란게 딱히 없고 공의 색깔이나 나라 이름으로 구분하는 것 처럼.)

HashMap 클래스

  • 데이터의 이름표를 적용하여 저장
  • Map 인터페이스를 상속받는 자료보관소이기 때문에, 암묵적 객체 형변환 규칙(자식클래스로 생성된걸 부모로 형변환)에 따라 Map형태로 선언하고 HashMap 형태로 할당한다.
  • 선언과 할당시에 HashMap의 이름표로 사용할 데이터 형(String)과 HashMap에 저장할 데이터 형을 클래스의 이름으로 명시해야하는데 이를 제너릭스라 한다.
  • 제너릭스에 명시할 수 있는 데이터 형은 반드시 클래스 이름이어야한다. 기본 자료형을 보관할 경우 Wrapper 클래스의 이름을 사용한다.
Map<String, 저장할 데이터의 클래스이름> data = new HashMap<String, 저장할 데이터의 클래스이름> ();
  • 기존에 저장된 데이터와 중복되는 이름이 저장될 경우, 기존에 저장된 데이터를 덮어 씌우게 된다.

<실습>

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("aaa", 111);
		hm.put("bbb", 222);
		hm.put("aaa", 444);
		hm.put("ccc", 333);
		hm.put("ccc", null);		// 객체를 넣는 것이므로 Null 사용 가능
		
		// 저장된 갯수 얻기
		System.out.println("HashMap size : " + hm.size());

		
		// 데이터 꺼내기
		System.out.println(hm.get("aaa"));
		System.out.println(hm.get("bbb"));
		System.out.println(hm.get("ccc"));
	}

}

ArrayList 사용

  • 무제한 확장 가능한 배열
  • List 인터페이스를 상속받는 클래스로, 데이터를 이름표 없이 무제한으로 보관할 수 있다.
  • 추가되는 데이터는 순차적으로 배열과 같은 인덱스 번호를 부여받는다.
  • 상위 인터페이스 형으로 선언하고 ArrayList 클래스로 객체를 할당하며, 선언과 할당시에는 보관하고자 하는 자료형에 대한 제너릭스를 명시한다.
List<저장할 데이터의 클래스 이름> list = new ArrayList<저장할 데이터의 클래스이름>();
import java.util.ArrayList;
import java.util.List;

public class Main02 {
	public static void main(String[] args) {
		// 객체 생성시 제너릭스의 사용
		// --> 클래스 이름 오른쪽에 <자료형>의 형식으로 표현한다.
		// 이때 자료형에는 클래스타입만 가능하다.
		// 기본 데이터형을 사용하고자 하는 경우에는
		// 해당 데이터형의 WrapperClass를 사용해야 한다.
		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);
		
		// 하나를 삭제 후, 전체 크기 다시 조회 --> 8개
		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);
		
		
	}

}

<List와 Beans를 활용한 데이터 리스트 만들기>

package study.java.model;
// 주소록 데이터를 표현하기 위한 Java Beans 
public class People {
	
	private String name;
	private String phoneNo;
	
	public People(String name, String phoneNo) {
		super();
		this.name = name;
		this.phoneNo = 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;
	}

	@Override
	public String toString() {
		return "People [name=" + name + ", phoneNo=" + phoneNo + "]";
	}
	
}
import java.util.ArrayList;
import java.util.List;

import study.java.model.People;

public class Main03 {
	public static void main(String[] args) {
		// List를 사용하는 가장 일반적인 방법은,
		// 사용자 정의 클래스에 대한 객체를 포함하도록
		// 지정하는 것이다.
		
		// 객체를 담기 위한 ArrayList	
		List<People> plist = new ArrayList<People>();
		
		// 10명의 데이터를 임의로 추가함
		for (int i = 0; i < 10; i++) {
			People p = new People("회원" + i, "010-1234-567" + i);
			plist.add(p);
		}
		
		// 출력하기
		for (int i = 0; i < plist.size(); i++) {
			// List에 저장된 데이터를 하나 꺼내면,
			// People 클래스 형의 객체다.
			People item = plist.get(i);
			System.out.println(item.toString());
		}

	}

}
profile
그림 그리는 백엔드 개발자

0개의 댓글