ArrayList는 자바에서 제공되는 객체 배열이 구현된 클래스로 객체 배열을 사용하는데 필요한 여러 메서드들이 구현되 어있어서 사용하는데 편의를 제공합니다
주요 메서드 알아보기
배열을 입력하고 값을 출력해보기.
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
//1번
ArrayList<String> list = new ArrayList<String>();
//2번
list.add("aaa");
list.add("bbb");
list.add("ccc");
//3번
for(int i=0; i<list.size();i++) {
String str = list.get(i);
System.out.println(str);
}
System.out.println("===========");
//4번
for(String s : list) {
System.out.println(s);
}
}
}
//결과물
aaa
bbb
ccc
==========
aaa
bbb
ccc
1번 : ArrayList 클래스를 사용하기 위해 list인스턴스를 생성합니다. <>에는 자료형이 들어가는데 생략하면 자료형에 상관 없이 값을 입력할 수 있지만 형변환을 해줘야 합니다.
2번 : .add 메서들 사용해 list 배열에 값을 입력합니다. String은 생성할 필요없이 바로입력이 가능하지만 다른 객체는 생성후 입력해야합니다.
3번 : for문을 통해 배열 값을 하나씩 출력하는데 범위를 .size를 통해 현재배열에 크기인 3을 지정해줍니다. .length와의 차이점은 .size는 현재 배열의 크기를 뜻하고 .length는 전체 배열이 길이를 뜻합니다. 만약 list[10]이었다면 sieze에서는 입력된 값의 크기인 3이 되지만 length는 여전히 10을 유지합니다.
4번 : 향상된 for문을 이용해서 값을 출력해보고 결과값을 확인하면 두개의 방법 모두 배열의 값을 출력했음을 확인할 수 있습니다.
그외에 메서드는 Java docs를 통해서 읽어보고 찾아가면서 해보시면됩니다.
<>의값(자료형)을 생략했을 때
public static void main(String[] args) {
//1번
ArrayList list = new ArrayList();
//2번
list.add("aaa");
list.add("bbb");
list.add("ccc");
//3번
for(int i=0; i<list.size();i++) {
String str = (String)list.get(i);
System.out.println(str);
}
System.out.println("===========");
//4번
for(Object s : list) {
System.out.println(s);
}
}
1번 : 자료형을 지정해주는 을 생략해보기 위해 지워줍니다.
3번 : list.get에 자료형을 지정되지 않아 에러가 발생하기에 (String)을 입력합니다.
4번 : String s : list에서 String이 아닌 모든 자료형을 포괄하는 Object로 수정해주고 실행하면 같은 결과값이 나옵니다.
예제
학생의 수강과목 학점 출력하기
Lee 학생은 두 과목을 수강하고, Kim 학생은 세 과목을 수강합니다.
Student클래스에 ArrayList 멤버변수를 하나 가지고 각 학생이 수강하는 과목을 관리하도록 합니다.
각 학생의 학점과 총점을 아래와 같이 출력해봅시다.
//1번
public class Subject {
public String name;
public int score;
//2번
public Subject(String name, int score) {
this.name=name;
this.score=score;
}
//3번
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
1번 : 각 과목 역할을 할 Subject 클래스를 만들고 멤버변수로 name과 score를 선언해줍니다.
2번 : Subject 생성자를 만들어 name과 score를 입력할 수 있게 만듭니다.
3번 : name과 score를 활용할 수 있게 get/set 메서드를 각각 만들어 줍니다.
import java.util.ArrayList;
//1번
public class Student {
public int studentId;
public String studentName;
ArrayList<Subject> subjectList;
//2번
public Student(int studentId, String studentName) {
this.studentId = studentId;
this.studentName= studentName;
subjectList = new ArrayList<Subject>();
}
//3번
public void addSubjcet(String name, int score) {
Subject subject = new Subject(name, score);
subjectList.add(subject);
}
//4번
public void showInfo() {
int total = 0;
for(Subject subject : subjectList) {
total = 0;
total += subject.getScore();
System.out.println(studentName + "학생의 "+subject.getName() +"과목의 점수는 "+subject.getScore()+"입니다.");
}
System.out.println(studentName + "학생의 "+"총점은" + total+"입니다");
}
}
1번 : Student클래스를 만들고 studentId, studentName와 를 담는 ArrayList subjectList를 멤버 변수로 선언합니다.
2번 : Student 생성자를 만들어 studentId와 score를 입력할 수 있게 하고 Subject가 생성 될때 함게 ArrayList도 생성 될 수 있도록 생성자를 함께 작성합니다.
3번 : 과목을 추가할 수 있는 addSubject 메서드를 만들고 name과 score를 입력하는데 그게 Subject생성자에 name과 score로 입력되도록 작성합니다. 그후 .add메서드를 통해 생성된 Subject가 ArrayList인 subjectList에 추가되도록 합니다.
4번 : 정보를 출력하는 showInfo메서드를 작성합니다. 향상된 for문을 사용해 subject안에 subjectList 배열에 내용들이 하나씩 담기게 해서 total에 더해주면서 총점을 구하고 출력문을 통해 각 subject안에 name과 score을 get메서들 통해서 가져와서 출력합니다.
public class StudentTest {
public static void main(String[] args) {
//1번
Student Lee = new Student(1001, "Lee");
Lee.addSubjcet("국어", 100);
Lee.addSubjcet("수학", 90);
//2번
Student Kim = new Student(1001, "Kim");
Kim.addSubjcet("국어", 100);
Kim.addSubjcet("수학", 90);
Kim.addSubjcet("영어", 80);
//3번
Lee.showInfo();
System.out.println("===============");
Kim.showInfo();
}
}
//결과물
Lee학생의 국어과목의 점수는 100입니다.
Lee학생의 수학과목의 점수는 90입니다.
Lee학생의 총점은90입니다
===============
Kim학생의 국어과목의 점수는 100입니다.
Kim학생의 수학과목의 점수는 90입니다.
Kim학생의 영어과목의 점수는 80입니다.
Kim학생의 총점은80입니다
1번: Lee학생의 인스턴스를 생성하고 addSubject를 통해 각 과목의 이름과 점수를 입력합니다
2번: 위와 마찬가지로 KIm학생의 인스턴스를 생성하고 과목이름과 점수를 입력합니다.
3번 정보출력을 위해 showInfo메서드를 사용하면 결과물과 같은 출력문이 출력됩니다.