수업

+27 컬렉션 프레임워크: ArrayList

hs_developer 2022. 6. 10. 16:01

A c = new B()

 

A 를 쓰되 B 메서드 주소를 쓴다.

 

 

ArrayList

 

1.

import java.util.*;
public class M {
	
	public static void main(String[] args) {
		
		// 제네릭X
		// 이름만 다르고 기능 같음 -> ArrayList, Vector, LinkedList
		ArrayList list = new ArrayList();
//		Vector list = new Vector();
//		LinkedList list = new LinkedList();
		
		// 추가
		list.add("김가가");
		list.add("김나나");
		list.add("김다다");
		list.add("김라라");
		list.add("김마마");
		
		// 전체 출력 
		for(Object obj:list)
		{
			String name = (String)obj;
			System.out.println(name);
//			System.out.println(obj); // String이 아니라 제어 어렵다
		}
		
		System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		
		// 전체 출력2
		for(int i=0; i<list.size(); i++)
		{
			String name = (String)list.get(i);
			System.out.println(name);
		}
		
		System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		
		// 전체 출력3 -> 람다
		list.forEach(name -> System.out.println(name));
		
		
		// 데이터 추가
		list.add("김바바");
		list.add(2, "김사사"); // 순서 2번째 인덱스로
		list.add(3, "김아아");
		
		
		// 데이터 수정
		list.set(0, "김각각");
		
		System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		
		// 데이터 삭제
		list.remove(2);
		
		// 확인
		for(int i=0; i<list.size(); i++)
		{
			String name = (String)list.get(i);
			System.out.println(name + " : " + i);
		}
		
		// 전체 삭제
		list.clear();
		
		// 저장된 개수
		System.out.println("총 인원: " + list.size());
		
		// 데이터 존재 여부
		if(list.isEmpty())
			System.out.println("저장공간 비워짐");
		else
			System.out.println("데이터 있다.");

	}
}

 

 

2.

import java.util.*;

class Sawon
{
	private int sabun;
	private String name;
	private String dept;
	private String job;
	private int pay;
	
	public int getSabun() {
		return sabun;
	}
	public void setSabun(int sabun) {
		this.sabun = sabun;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public int getPay() {
		return pay;
	}
	public void setPay(int pay) {
		this.pay = pay;
	}
	
	// 매개변수 있는 생성자
	public Sawon(int sabun, String name, String dept, String job, int pay) {

		this.sabun = sabun;
		this.name = name;
		this.dept = dept;
		this.job = job;
		this.pay = pay;
	}
	
}

public class M2 {
	
	public static void main(String[] args) {
			
		ArrayList list = new ArrayList();
		
		list.add(new Sawon(1, "김가가", "개발부", "사원", 3200));
		list.add(new Sawon(2, "김나나", "총무부", "대리", 4200));
		list.add(new Sawon(3, "김다다", "기획부", "과장", 5200));
		list.add(new Sawon(4, "김라라", "자재부", "차장", 6200));
		list.add(new Sawon(5, "김마마", "영업부", "팀장", 7200));
		
		System.out.println("ㅡㅡㅡㅡ 사원 출력 ㅡㅡㅡㅡ");
		System.out.println("사원 총 인원: " + list.size() + "명");
		
		// Object(상위 클래스) -> Sawon(하위 클래스) 메서드에 접근 못함
		for(Object obj:list) 
		{
			Sawon sa = (Sawon)obj; // 그래서 형변환 필요
			System.out.println("사번: " + sa.getSabun());
			System.out.println("이름: " + sa.getName());
			System.out.println("부서: " + sa.getDept());
			System.out.println("직위: " + sa.getJob());
			System.out.println("연봉: " + sa.getPay());
			System.out.println("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
		}
			
		System.out.println("ㅡㅡㅡㅡ 사원 추가 ㅡㅡㅡㅡ");
		list.add(new Sawon(6, "김바바", "개발부", "사장", 8200));
		
		System.out.println("ㅡㅡㅡㅡ 사원 수정 ㅡㅡㅡㅡ");
		list.set(0, new Sawon(1, "김가가", "개발부", "과장", 3600)); // 0: 인덱스 번호, 1: 실제 번호
		
		System.out.println("ㅡㅡㅡㅡ 사원 퇴사 ㅡㅡㅡㅡ");
		list.remove(1); // 인덱스 번호 -> "김나나" 삭제
		
		System.out.println("ㅡㅡㅡㅡ 회사 폐업 ㅡㅡㅡㅡ");
		list.clear();

	}
	
}

 

 

 

실전같은 예제

 

1. 사원 데이터 <추가, 수정, 상세보기, 삭제>

// Sawon.java

// 사원 정보 데이터형 -> SawonVO, SawonDTO
public class Sawon {

	private int sabun;
	private String name;
	private String dept;
	private String job;
	private int pay;
	
	public int getSabun() {
		return sabun;
	}
	public void setSabun(int sabun) {
		this.sabun = sabun;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public int getPay() {
		return pay;
	}
	public void setPay(int pay) {
		this.pay = pay;
	}
	
	// 매개변수 있는 생성자
	public Sawon(int sabun, String name, String dept, String job, int pay) {

		this.sabun = sabun;
		this.name = name;
		this.dept = dept;
		this.job = job;
		this.pay = pay;
	}
		
}
// SawonManager

import java.util.*;
public class SawonManager {

	// 하나의 데이터를 공유
	private static ArrayList list = new ArrayList();
	
	// 초기화
	static
	{
		list.add(new Sawon(1, "김가가", "개발부", "사원", 3200));
		list.add(new Sawon(2, "김나나", "총무부", "대리", 4200));
		list.add(new Sawon(3, "김다다", "기획부", "과장", 5200));
		list.add(new Sawon(4, "김라라", "자재부", "차장", 6200));
		list.add(new Sawon(5, "김마마", "영업부", "팀장", 7200));
	}
	
	
	// 1. 목록 출력
	public void sawonList()
	{
		System.out.println("ㅡㅡㅡ 사원 목록 ㅡㅡㅡ");
		for(Object obj:list)
		{
			Sawon sa = (Sawon)obj;
			System.out.println(sa.getSabun() + " " 
							+ sa.getName() + " " 
							+ sa.getDept() + " " 
							+ sa.getJob()+ " " 
							+ sa.getPay());
		}
	}
	
	
	// 2. 수정
	public void sawonUpdate()
	{
		Scanner sc = new Scanner(System.in);
		
		System.out.println("사번 입력: ");
		int sabun = sc.nextInt();
		
		System.out.println("이름 입력: ");
		String name = sc.next();
		
		System.out.println("부서 입력: ");
		String dept = sc.next();
		
		System.out.println("직위 입력: ");
		String job = sc.next();
		
		System.out.println("연봉 입력: ");
		int pay = sc.nextInt();
		
		Sawon sa = new Sawon(sabun, name, dept, job, pay);
		
		int k=0;
		for(Object obj:list)
		{
			Sawon s = (Sawon)obj;
			if(s.getSabun()==sabun)
			{
				break; // 인덱스 번호 구하기
			}
			k++;
		}
		
		list.set(k, sa); // 해당 값 인덱스 번호를 sa로 변경
		
		sawonList();
		
		
	}
	
	// 3. 추가
	public void sawonInsert()
	{
		Scanner sc = new Scanner(System.in);
		
		System.out.println("이름 입력: ");
		String name = sc.next();
		
		System.out.println("부서 입력: ");
		String dept = sc.next();
		
		System.out.println("직위 입력: ");
		String job = sc.next();
		
		System.out.println("연봉 입력: ");
		int pay = sc.nextInt();
		
		int sabun=0;
		for(Object obj:list)
		{
			Sawon sa = (Sawon)obj;
			if(sa.getSabun() > sabun)
				sabun = sa.getSabun();
		}
		// 시퀀스 -> Max+1 -> 게시판 번호 매길 때 사용
		Sawon sa = new Sawon(sabun+1, name, dept, job, pay);
		
		list.add(sa);
		sawonList();
	}
	
	// 4. 상세 보기
	public void sawonDetail()
	{
		Scanner sc = new Scanner(System.in);
		
		System.out.println("이름 입력: ");
		String name = sc.next();
		
		for(Object obj:list)
		{
			Sawon sa = (Sawon)obj;
			if(sa.getName().equals(name))
			{
				System.out.println("ㅡㅡㅡ 사원 정보 ㅡㅡㅡ");
				System.out.println("사번: " + sa.getSabun());
				System.out.println("이름: " + sa.getName());
				System.out.println("부서: " + sa.getDept());
				System.out.println("직위: " + sa.getJob());
				System.out.println("연봉: " + sa.getPay());
			}
		}
	}
	
	// 5. 삭제
	public void sawonDelete()
	{
		Scanner sc = new Scanner(System.in);
		
		System.out.println("이름 입력: ");
		String name = sc.next();
		
		int k=0;
		for(Object obj:list)
		{
			Sawon sa = (Sawon)obj;
			if(sa.getName().equals(name))
			{
				list.remove(k);
				break; // 끝나면 break
			}
			k++; // remove 후 나머지 출력
		}
		
		sawonList();
	}
}
// UserMain.java

public class UserMain {

	public static void main(String[] args) {
		
		SawonManager sm = new SawonManager();
		
		sm.sawonList();
//		sm.sawonDetail();
//		sm.sawonDelete();
//		sm.sawonUpdate();
		sm.sawonInsert();
	}
}