Back-end/Java 개념
Java - List
유로 청년
2022. 6. 2. 13:51
List
리스트(List)는 배열(Array)과 비슷한 자바 자료형이지만, 배열보다 편리한 기능을 많이 갖고 있다.
What is different between Array and List?
- 리스트(List)와 배열(Array)의 가장 큰 차이점은 배열(Array)는 크기가 정해져 있어 정적(Static)인 것에 반해
리스트(List)는 크기가 정해져 있지 않아 동적(Dynamic)하게 변한다는 것이다. - List 자료형에는 ArrayList, Vector, LinkedList 등의 List interface를 구현한 자료형이 있다.
ArrayList
1. add method
- add method를 통해 크기가 정해져 있지 않은 ArrayList object에 원소를 추가 및 수정할 수 있다.
- ArrayList<자료형> = new ArrayList<>();
- J2SE 5.0 버전 이후부터 객체를 포함하는 자료형에도 어떤 객체를 포함하는지에 대해서 명확하게 표현할 것을
권고하고 있다. 따라서 해당 <> 내에 해당 객체안의 자료형을 표시한다.
import java.util.Scanner; //get class "Scanner"
import java.util.ArrayList;
public class HelloWorld {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // create object for scanner
ArrayList<String>Subjects = new ArrayList<>();
ArrayList<String>Scores = new ArrayList<>();
int sumOfScores = 0;
double meanOfScores;
while(true) {
String nameOfSubject;
System.out.println("Enter Name of Subject : (if you want to quit, Enter !)");
nameOfSubject = scan.nextLine();
if(nameOfSubject.equals("!")) {
break;
}else {
Subjects.add(nameOfSubject);
}
}
System.out.printf("List \"Subject\" : " + Subjects + "\n");
System.out.printf("Size of List : %d \n", Subjects.size());
for(int i = 0; i < Subjects.size(); i++) {
String inputScore;
System.out.printf("Enter a score of %s :", Subjects.get(i));
inputScore = scan.nextLine();
Scores.add(inputScore);
}
System.out.printf("List \"Scores\" : " + Scores + " \n");
System.out.printf("Size of List : %d \n\n", Scores.size());
for(int i = 0; i < Scores.size(); i++) {
int scoreOfSubject = Integer.parseInt(Scores.get(i));
sumOfScores += scoreOfSubject;
}
meanOfScores = sumOfScores / Scores.size();
System.out.printf("Sum of subject : %d \n", sumOfScores);
System.out.printf("Mean of subjects : %f \n", meanOfScores);
}
}
- scanner 클래스, ArrayList 자료형은 java.util 패키지에 속해 있기 때문에 import 메소드를 이용하여 java.util 패키지를 import 해야 한다.
- "Subjects", "Scores" ArrayList 자료형을 선언하고, 사용자로 부터 값을 하나하나 입력 받는다.
- add 메소드를 통해 입력받은 값을 ArrayList에 하나씩 추가한다.
- get 메소드를 통해 ArrayList의 원소 값들을 하나씩 추출할 수 있다.
- size 메소드를 통해 ArrayList의 길이를 반환받을 수 있다.
- 배열(Array)인 경우, [ ] (대괄호)를 이용해서 원소 값들에게 접근할 수 있지만, 리스트(List)는 get 메소드를 이용해야만이 원소 값들에게 접근할 수 있다. 또한 배열(Array)인 경우, .length 속성을 통해 배열의 길이를 반환받을 수 있지만, 리스트는 size 메소드를 이용해야지만이 리스트의 길이(사이즈)를 반환받을 수 있다.
2. get method
- get 메소드를 통해 ArrayList의 특정 인덱스 값을 추출할 수 있다.
3. size method
- size 메소드를 통해 ArrayList의 원소 갯수(List의 길이)를 반환 받을 수 있다.
4. contains method
- contains 메소드를 통해 리스트 안에 해당 항목(원소)가 있는지 여부를 판별하여 그 결과를 boolean으로 반환받는다.
5. remove method
- remove 메소드에는 2가지 방식이 있다.
1. remove(원소)
2. remove(인덱스)
5.1. remove(원소) 은 리스트에서 원소에 해당되는 항목을 삭제하고 삭제한 결과(true, false)를 리턴한다.
System.out.println(Subjects.removes("Math")); // true 출력
▶ "Math" 라는 항목을 성공적으로 삭제하면 true를 리턴한다.
5.2. remove(인덱스)은 해당 인덱스의 항목을 삭제하고 삭제된 항목을 리턴한다.
System.out.println(Subjects.removes(0)); // Korean 출력
▶ Subjects list의 첫 번째 항목은 "Korean" 이기 때문에 "Korean"이 삭제된 후, "Korean"을 리턴한다.
6. set method
- set 메소드는 리스트내에 존재하는 원소 값을 다른 값으로 대체할 때 사용된다.
// Bubble sort
String temp = names.get(j);
names.set(j, names.get(j+1));
names.set(j+1, temp);