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 를 사용하는 것을 권장한다.
============================