2020-08-11 # List
- 언어/자바
- 2020. 8. 12.
List란?
list는 배열의 한계 때문에 만들어진 자료형이다.
List자료형에는 ArrayList,LinkedList등의 List인터페이스를 구현한 자료형이 있다.
배열은 사용할때 index크기를 정해야 하는데
list는 메모리가 허용하는 한 계속 추가할 수 있도록 만든 자료형 클래스이다.
import java.util.List 는 인터페이스 클래스고
List를 사용하기 위해서는 인스턴스화를 해야한다.
List는 인터페이스이고 ArrayList는 List에 상속된 클래스이다.
ArrayList
ArrayList는 내부적으로 데이터를 배열에서 관리하며 데이터의 추가,삭제를 위해 임시 배열을 생성해
데이터를 복사하는 방법을 사용한다.각 데이터는 인덱스를 갖고 있기 때문에 한번에 참조가 가능해서
검색할때 좋지만 대량의 자료를 추가,삭제를 할 경우 데이터의 복사가 많이 일어나게 되어 성능이 저하가
될 수 있다.
//ArrayList는 util 패키지 안에 존재하기때문에 import 설정을 해줘야 사용할 수있다. import java.util.ArrayList; //ArrayList 생성 ArrayList<Student> list = new ArrayList<Student>(); //ArrayList foreach문 for(Student i : list) //Student [0] 부터 list 안의 원소 수만큼 반복문 실행 |
List와 ArrayList의 차이점
List는 인터페이스, ArrayList는 클래스라는 점에서 차이가있다.
클래스인 ArrayList를 사용해서 생성시점에 List를 구현할 수 있는 것이다.
List는 인터페이스이므로 포유류
ArrayList는 클래스이므로 인간 이라고 생각 할 수 있다.
기능적인 차이는 거의 없다.
LinkedList
LinkedList는 데이터를 저장하는 노드가 이전,다음 노드의 상태만 알고 있다.
ArrayList와 같이 데이터의 추가 삭제시 불필요한 데이터의 복사가 없어 데이터의 추가,삭제에 유리하지만
데이터의 검색시 처음부터 노드를 살펴야하기때문에 검색기능보단 추가,삭제시 좋다.
ArrayList를 사용한 성적관리 프로그램을 만들어 보았다.
밑의 프로그램에서 ArrayList를 사용한 이유는 학생수를 한명, 혹은 고정된 값만큼 밖에 추가 할 수 없었던
배열의 단점을 보완하기 위해서 ArrayList를 사용해서 코딩을 해보았다.
//Main
import java.util.Scanner;
import java.util.ArrayList; //이건 없어도 될듯
public class StudentMag {
int select = -1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StudentCont stuc = new StudentCont();
int select = -1;
while(true) {
System.out.println("===============성적관리===============");
System.out.println("=1.추가 2.조회 3.전체조회 4.수정 5.삭제 0.종료=");
System.out.println("===================================");
select=sc.nextInt();
if(select==1) {
stuc.insert();
}
else if (select==2){
stuc.serch();
}
else if (select==3) {
stuc.serchAll();
}
else if (select==4) {
stuc.modify();
}
else if (select==5) {
stuc.delete();
}
else if (select==0) {
break;
}
else {
System.out.println("숫자를 제대로 입력해주세요");
}
}
}
}
//Controller
import java.util.ArrayList;
import java.util.Scanner;
public class StudentCont {
ArrayList<StudentData> list;
StudentData stud;
Scanner sc;
String num,name;
int kor,eng, mat;
StudentCont() {
list = new ArrayList();
sc = new Scanner(System.in);
}
//학생 정보 입력
void insert(){
System.out.println("학번");
num = sc.next();
System.out.println("이름");
name = sc.next();
System.out.println("국어");
kor = sc.nextInt();
System.out.println("영어");
eng = sc.nextInt();
System.out.println("수학");
mat = sc.nextInt();
list.add(new StudentData(num,name,kor,eng,mat)); //arraylist객체에 정보를 담음
}
//학생정보 조회
void serch() {
while(true) {
System.out.println("조회할 학번을 입력하세요");
System.out.println("종료하시려면 숫자 0 을 입력하세요");
num=sc.next();
System.out.println("학번 이름 국어 영어 수학 총점 평균");
for(int i=0;i<list.size();i++) { //list에 담겨진 값들을 for문을 이용해
if(list.get(i).getNum().equals(num)) { //입력한 학번값과 같은 값이 있으면
System.out.println( //값을 출력
list.get(i).getNum()
+"\t"+ list.get(i).getName()+"\t"+ list.get(i).getKor()
+"\t"+ list.get(i).getEng()+"\t"+ list.get(i).getMat()
+"\t"+ list.get(i).getTotal()+"\t"+ list.get(i).getAvg());
}
else if ("0".equals(num)) {
break;
}
else {
System.out.println("조회한 학생이 존재하지 않습니다");
}
}
}
}
//전체조회
void serchAll() {
System.out.println("학번 이름 국어 영어 수학 총점 평균");
for(int i=0;i<list.size();i++) { //비교하지 않고 다 출력
System.out.println(list.get(i).getNum()
+"\t"+ list.get(i).getName()+"\t"+ list.get(i).getKor()
+"\t"+ list.get(i).getEng()+"\t"+ list.get(i).getMat()
+"\t"+ list.get(i).getTotal()+"\t"+ list.get(i).getAvg());
}
}
//수정
void modify() {
int select;
System.out.println("수정할 학번");
num = sc.next();
for(int i=0;i<list.size();i++) {
if(list.get(i).getNum().equals(num)) {
while(true) {
System.out.println("수정할 정보를 입력하세요");
System.out.println("1.학번 2.이름 3.국어 4.영어 5.수학 0.종료");
select = sc.nextInt();
if(select == 1) {
System.out.println("수정할 학번을 입력하세요");
num=sc.next();
list.get(i).setNum(num);
System.out.println("수정이 완료되었습니다.");
}
else if(select == 2) {
System.out.println("수정할 이름을 입력하세요");
name=sc.next();
list.get(i).setName(name);
System.out.println("수정이 완료되었습니다.");
}
else if(select == 3) {
System.out.println("수정할 국어점수를 입력하세요");
num=sc.next();
list.get(i).setKor(kor);
}
else if(select == 4) {
System.out.println("수정할 영어점수를 입력하세요");
num=sc.next();
list.get(i).setEng(eng);
}
else if(select == 5) {
System.out.println("수정할 수학점수를 입력하세요");
num=sc.next();
list.get(i).setMat(mat);
}
else if(select == 0) {
break;
}
else {
System.out.println("숫자를 제대로 입력해주세요");
}
}
}
}
}
//삭제
void delete() {
System.out.println("삭제할 학번을 입력해주세요");
num=sc.next();
for(int i=0;i<list.size();i++) {
if(list.get(i).getNum().equals(num));{
list.remove(i);
}
}
}
}
//Data Class
public class StudentData {
private int kor,eng,mat;
private String name,num;
public StudentData(String num,String name, int kor, int eng, int mat){
this.num = num;
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getTotal() {
return (kor+eng+mat);
}
public float getAvg() {
float avg =kor+eng+mat/3.f;
String str = String.format("%.2avg",avg);
return avg;
// return (kor+eng+mat)/3.f;
}
}
'언어 > 자바' 카테고리의 다른 글
[JAVA] Thread (0) | 2020.08.13 |
---|---|
2020-08-12 #추상클래스와 인터페이스 (0) | 2020.08.12 |
2020-08-10 ArrayList 기본개념 (0) | 2020.08.10 |
2020-08-10 클래스의 관계 (0) | 2020.08.10 |
2020-08-07 배열 (0) | 2020.08.06 |