Back/JAVA

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

시월해 2021. 3. 17. 17:09

* 컬렉션 프레임워크


 - 컬렉션의 사전적 의미 : 수집해서 모으다, 저장한다는 의미.
 - 자바에서 컬렉션은 데이터의 추가, 수정, 삭제, 검색 등을 효과적으로 제공해주는 자료 구조 관련 클래스
   ==> 값을 담을 수 있는 그릇을 의미함(컨테이너 개념).
 - 컬렉션 프레임워크
   1) 컬렉션 클래스를 표준화하여 설계해 놓은 인터페이스.
   2) List 계열, Set 계열, Map 계열
 
* List 계열의 컬렉션 프레임워크의 특징


 - 자료의 순서가 보장(index) : 정렬 기능 제공
 - 중복 데이터 허용.
 - List 인터페이스의 자식 클래스로 구현
   ==> ArrayList(자주), LinkedList(가끔), Vector(가끔)
 - 특히 DB의 데이터를 레코드 단위로 저장하거나 저장된 데이터를 가져올 경우 많이 사용 됨.

 


예제1)

public class Ex01 {

	public static void main(String[] args) {
		
		// 배열 객체 생성
		String[] str = {"홍길동", "이순신", "유관순", "홍길동"};
		
		for(String k : str) {
			System.out.println("str 배열 요소 >>> " + k);
		}
		System.out.println();
		
		// ArrayList 객체 생성 
		ArrayList<String> list = new ArrayList<String>();
		
		// 1. add("값") : 데이터를 추가하는 메서드
		list.add("홍길동");
		list.add("이순신");
		list.add("유관순"); // 중복데이터
		list.add("김유신");
		list.add("김연아");
		list.add("유관순"); // 중복데이터
		
		// 2. size() : 데이터의 크기를 반환하는 메서드.
		System.out.println("list의 크기 >>> " + list.size());
		System.out.println();
		
		// 3. get(index) : list에 저장되어 있는 데이터를 출력하는 메서드.
		System.out.println("세번째 인덱스 >>> " + list.get(3));
		System.out.println();
		
		// list에 있는 전체 요소를 화면에 출력해 보자.
		for(int i=0; i<list.size(); i++) {
			System.out.println("list["+i+"] >>> "+list.get(i));
		}
		System.out.println();
		
		// 4. clear() : 모든 요소를 제거하는 메서드.
		list.clear();
		System.out.println("list의 크기 >>> " + list.size());
		System.out.println();
		
		// 데이터 다시 추가
		list.add("홍길동");
		list.add("이순신");
		list.add("유관순"); // 중복데이터
		list.add("김유신");
		list.add("김연아");
		list.add("유관순"); // 중복데이터
		
		// 5. remove(index) : list의 특정 요소(index)를 삭제하는 메서드.
		// 다음 index부터 index값이 한 칸씩 앞당겨진다.
		list.remove(2);
		
		for(int i=0; i<list.size(); i++) {
			System.out.println("list["+i+"] >>> "+list.get(i));
		}
		System.out.println();
		
		// 6. add(index, element(값)) : list의 특정 index에 특정 데이터를 추가하는 메서드.
		// 해당 index에 추가가 되고, 기존에 있던 데이터들은 뒤로 한 index씩 밀려난다.
		
		list.add(2, "세종대왕");
		
		for(int i=0; i<list.size(); i++) {
			System.out.println("list["+i+"] >>> "+list.get(i));
		}
		System.out.println();
		

	}

}


예제2) Iterator를 사용하여 출력

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

public class Ex02 {

	public static void main(String[] args) {
		
		// 다형성 : 부모의 참조변수를 이용해서 자식 객체를 생성하는 방법
		// List를 상속 받은 ArrayList
		List<String> list = new ArrayList<String>();

		list.add("one");
		list.add("two");
		list.add("three");
		list.add("four");
		list.add("five");
		
		// Iterator
		// 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 
		// 요소들을 읽어오는 방법을 표준화 해놓은 객체
		
		Iterator<String> it = list.iterator();
		
		// hasNext() : 읽어올 요소가 있는 지 확인하는 메서드. - boolean형
		// 가져올 값이 있으면 true 값 반환, 없으면 false 값 반환.
		while(it.hasNext()) {
			// next() : 다음 요소를 가져오는 메서드
			System.out.println(it.next());
		}
	}

}


예제3) 객체를 제너릭으로 하는 ArrayList

public class MemberDTO {

	// 만약 DB상의 테이블의 이름이 member(회원 테이블)이라고 가정했을 때
	// member 테이블의 구성(컬럼)이 id, pwd, name, age, address
	// 로 구성되었다고 가정을 하면
	
	// 멤버변수
	private String id, pwd, name, address;
	private int age;
	
	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;
	}
	
	public String getPwd() {
		return pwd;
	}
	
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getAddress() {
		return address;
	}
	
	public void setAddress(String address) {
		this.address = address;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import model.MemberDTO;

public class Ex04 {

	public static void main(String[] args) {
		
		List<MemberDTO> list = new ArrayList<MemberDTO>();
		
		Scanner sc = new Scanner(System.in);
		System.out.print("회원 수를 입력하세요. : ");

		int count = sc.nextInt();
		
		// 1. 키보드로 회원의 수만큼 회원 정보를 입력 받아서 list에 저장해보자.
		for(int i=0; i<count; i++) {
			MemberDTO dto = new MemberDTO();
			
			System.out.println((i+1)+"번째 회원의 "
					+"아이디, 비밀번호, 이름, 나이, 주소를 입력하세요...");
			
			dto.setId(sc.next());
			dto.setPwd(sc.next());
			dto.setName(sc.next());
			dto.setAge(sc.nextInt());
			dto.setAddress(sc.next());
			
			// 생성된 dto 객체의 '주소값'을 ArrayList에 차례대로 저장한다.
			list.add(dto);
			System.out.println("::::::::::::::::::::::::::::::::::::::");
			
		}
		
		System.out.println("아이디\t비밀번호\t이   름\t나   이\t주   소");
		
		// list에 있는 데이터들을 화면에 출력해보자.
		for(int i=0; i<list.size(); i++) {
			// list에 저장되어있는 '주소값'을 받을 객체
			MemberDTO dto = list.get(i);
			System.out.println(dto.getId()+"\t"
							  +dto.getPwd()+"\t"
							  +dto.getName()+"\t"
							  +dto.getAge()+"\t"
							  +dto.getAddress());
			System.out.println("=======================================");
		}
		
		sc.close();
	}

}