Java

Java List 와 ArrayList

승모근뭉치 2023. 1. 30. 12:46

프로젝트 내 src 내 javabasic 패키지 내 Ex13Munje.java

package javabasic;

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

/*
 * Ex13Munje
 * 
 * 멤버 변수
 * 		List<Person>list;
 * 		Scanner sc;
 * 생성자
 * 		list 와 sc 생성
 * 멤버 메서드
 * 		dataAdd : Person 데이타(이름,년도,키,몸무게) 를 입력하여 list 에 추가
 * 		dataDel : 이름을 입력하면 list 에 그 이름을 찾아서 삭제
 * 		dataAllWrite : list 의 모든 데이타를 출력
 * 		int getMenu : 1.추가 2.삭제 3. 전체출력 4.종료 번호를 입력받아 리턴하는 메서드
 * 메인에서
 * 		while반복문을 이용하여
 * 		getMenu 로부터 번호를 리턴받아
 * 		1 이면 dataAdd 호출
 * 		2 이면 dataDel 호출
 * 		3 이면 dataAllWrite 를 호출하고
 * 		그 이외의 숫자는 "프로그램 종료"
 */
public class Ex13Munje {
	List<Person> list;
	Scanner sc;

	public Ex13Munje() {
		// TODO Auto-generated constructor stub
		list = new ArrayList<Person>();
		sc = new Scanner(System.in);
	}

	public void dataAdd() {
		System.out.println("이름입력");
		String name = sc.nextLine();
		System.out.println("태어난 년도 입력");
		int year = Integer.parseInt(sc.nextLine());
		System.out.println("키 입력");
		double height = Double.parseDouble(sc.nextLine());
		System.out.println("몸무게 입력");
		double weight = Double.parseDouble(sc.nextLine());

		Person p = new Person();
		p.setName(name);
		p.setYear(year);
		p.setHeight(height);
		p.setWeight(weight);

		// 리스트에 추가
		list.add(p);
		System.out.println(list.size() + "번째 데이타 추가!!");
	}

	public void dataDel() {
		System.out.println("삭제할 이름 입력");
		String name = sc.nextLine();
		boolean find = false;// 찾으면 true 로 변경
		for (int i = 0; i < list.size(); i = i + 1) {
			Person p = list.get(i);// list 에서 i번째 person 데이타를 얻는다
			// p 의 이름과 입력한 이름이 같으면 i번째 데이타를 삭제
			if (p.getName().equals(name)) {
				find = true;
				// 삭제
				list.remove(i);
				break;// 반복문 빠져나가기
			}
		}
		if (find)
			System.out.println(name + "님의 데이타를 삭제했습니다");
		else
			System.out.println(name + "님은 명단에 없습니다");
	}

	public void dataAllWrite() {
		System.out.println("\t\tPerson 명단");
		System.out.println();
		System.out.println("이름\t년도\t띠\t키\t몸무게\t평가");
		for (Person p : list)
			System.out.println(p.getName() + "\t" + p.getYear() + "\t" + p.getddi() + "\t" + p.getHeight() + "\t"
					+ p.getWeight() + "\t" + p.getPungga());
	}

	public int getMenu() {
		int menu;
		System.out.println("1.추가 2.삭제 3.전체출력 4.종료");
		System.out.println("번호를 선택하세요");
		menu = Integer.parseInt(sc.nextLine());
		return menu;
	}
	// List<Person> list;
	// Scanner sc;
	//
	// public Ex13Munje() {
	// // TODO Auto-generated constructor stub
	// list=new ArrayList<Person>();
	// sc=new Scanner(System.in);
	// }
	//
	// public void dataAdd()
	// {
	// System.out.println("정보 입력");
	// System.out.println("이름 입력 : ");
	// String name=sc.nextLine();
	// System.out.println("년도 입력 : ");
	// int year=Integer.parseInt(sc.nextLine());
	// System.out.println("키 입력 : ");
	// double height=Double.parseDouble(sc.nextLine());
	// System.out.println("몸무게 입력 : ");
	// double weight=Double.parseDouble(sc.nextLine());
	//
	// Person p=new Person();
	// p.setName(name);
	// p.setYear(year);
	// p.setHeight(height);
	// p.setWeight(weight);
	//
	// list.add(p);
	// }
	//
	// public void dataDel()
	// {
	// System.out.println("이름 입력 : ");
	// String name=sc.nextLine();
	// list.
	// }
	//
	// public void dataAllWrite()
	// {
	// System.out.printf("이름\t년도\t키\t몸무게\t띠\t평가\n");
	// for(int i=0;i<list.size();i=i+1)
	// {
	// Person p=list.get(i);
	// System.out.printf("%-4s\t%-4d\t%-6.2f\t%-6.2f\t%-4s\t%-2s\n",p.getName(),p.getYear(),p.getHeight(),p.getWeight(),p.getddi(),p.getPungga());
	// }
	// }
	//
	// public int getMenu()
	// {
	// System.out.println("1.추가 2.삭제 3. 전체출력 4.종료");
	// System.out.println("숫자를 입력하세요");
	// int menu=Integer.parseInt(sc.nextLine());
	// return menu;
	// }

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Ex13Munje ex = new Ex13Munje();
		while (true) {
			switch (ex.getMenu()) {
			case 1:
				ex.dataAdd();
				break;
			case 2:
				ex.dataDel();
				break;
			case 3:
				ex.dataAllWrite();
				break;
			default:
				System.out.println("** 프로그램을 종료합니다 **");
				return;
			// System.exit(0);
			}
			System.out.println();
		}

		// Ex13Munje ex=new Ex13Munje();
		//
		// while(true)
		// {
		// int num = ex.getMenu();
		// if(!(num>=1 && num<=3))
		// {
		// System.out.printf("프로그램 종료");
		// break;
		// }
		//
		// switch(num)
		// {
		// case 1:
		// ex.dataAdd();
		// break;
		// case 2:
		// ex.dataDel();
		// break;
		// case 3:
		// ex.dataAllWrite();
		// break;
		// }
		// }

	}

}
1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
1
이름입력
고길동
태어난 년도 입력
1965
키 입력
171.1
몸무게 입력
78.2
1번째 데이타 추가!!

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
1
이름입력
한가인
태어난 년도 입력
2001
키 입력
173.3
몸무게 입력
43.9
2번째 데이타 추가!!

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
1
이름입력
이용정
태어난 년도 입력
1986
키 입력
179.9
몸무게 입력
64.5
3번째 데이타 추가!!

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
1
이름입력
장진숙
태어난 년도 입력
1972
키 입력
172.9
몸무게 입력
43.1
4번째 데이타 추가!!

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
1
이름입력
김말숙
태어난 년도 입력
1933
키 입력
155.3
몸무게 입력
50.2
5번째 데이타 추가!!

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
3
		Person 명단

이름	년도	띠	키	몸무게	평가
고길동	1965	뱀	171.1	78.2	비만
한가인	2001	뱀	173.3	43.9	허약
이용정	1986	범	179.9	64.5	허약
장진숙	1972	쥐	172.9	43.1	허약
김말숙	1933	닭	155.3	50.2	정상

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
2
삭제할 이름 입력
김말똥
김말똥님은 명단에 없습니다

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
2
삭제할 이름 입력
장진숙
장진숙님의 데이타를 삭제했습니다

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
3
		Person 명단

이름	년도	띠	키	몸무게	평가
고길동	1965	뱀	171.1	78.2	비만
한가인	2001	뱀	173.3	43.9	허약
이용정	1986	범	179.9	64.5	허약
김말숙	1933	닭	155.3	50.2	정상

1.추가 2.삭제 3.전체출력 4.종료
번호를 선택하세요
4
** 프로그램을 종료합니다 **

 

========================

 

List

sequence 로도 알려져 있다.

순서를 가지는 컬렉션이다.

set 은 중복 요소를 허용하지 않으나 리스트는 중복 요소를 가질 수 있다.

 

======================================================

 

위의 코드는 리스트에 담는 자료형이 Person 이라는 클래스를 객체로 새로 생성해 집어 넣으므로

그리하여

중복 요소를 가질 수 없게 되어 있다. 

Person 이라는 객체 내의 멤버 변수의 내용이 중복 되더라도 Person 객체를 새로 생성하면 모두 다 다른 객체이기 때문이다.

 

============================

 

ArrayList 인스턴스는 capacity 를 가진다.

이 ArrayList 구현체는 동기화하지 않는다. 만약에 여러개 스레드들이 하나의 ArrayList 인스턴스를 동시에 접근한다면, 그리고 적어도 그 스레드들 중에 한 개가 그 ArrayList 인스턴스를 구조적으로 수정한다면, 그 ArrayList 는 반드시 외부적으로 동기화되어야만 한다.

 

===========================

 

새 컬렉션 구현체들과 다르게, Vector 는 동기화한다. 만약에 thread-safe 구현체가 필요치 않게 된다면, Vector 대신에 ArrayList 를 사용하는 것을 권장한다.

 

============================