데이터를 쉽게 다룰 수 있도록 만든 일종의 라이브러리. 자료구조
종류
import java.util.*;
class JavaPractice {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// 다형성 적용 (List가 ArrayList보다 큰 개체의 개념)
// List.class >> interface List<E> >> boolean add(E e); (요소 추가)
list.add("Toy");
list.add("Box");
list.add("Robot");
// List.class >> interface List<E> >> int size(); (list의 크기)
// List.class >> interface List<E> >> E get(int index); (요소 가져오기)
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
System.out.println();
// List.class >> interface List<E> >> E remove(int index); (요소 제거)
list.remove(0);
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
}
}
[Console]
일반적인 배열 | ArrayList |
---|---|
객체를 생성할 때 크기를 정해줘야 한다. | 배열의 크기를 정하지 않아도 된다. |
배열의 범위를 초과하면 새로운 범위의 배열을 만들어줘야 한다. | 배열의 추가와 삭제가 쉽다. |
오류가 생길 수 있다. | 배열의 범위를 초과하게 되면 클래스 안에서 객체를 생성하는 코드를 실행시킨다. |
import java.util.*;
class JavaPractice {
public static void main(String[] args) {
List<String> list = new LinkedList<>();
/*
2-1. ArrayList 코드에서
new ArrayList<>(); >> new LinkedList<>(); 수정
*/
list.add("Toy");
list.add("Box");
list.add("Robot");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
System.out.println();
list.remove(0);
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
}
}
ArrayList | LinkedList | |
---|---|---|
리스트의 사용 | 일반 배열을 대신한다. 연속된 공간을 이용한다. | 추가/삭제가 많은 작업이 있을 때 쓴다. |
배열 요소를 추가할 때 | 배열이 가득 차면 다른 배열을 새로 생성해서 복사한다 (시간이 많이 걸린다) | 객체를 하나 생성하고 주소를 달아주면 된다 (개수 제한 X) |
배열 요소를 지울 때 | 이미 잡아놓은 요소의 크기가 있다. 새로 배열을 생성하거나, 인덱스를 당겨와야한다. | 요소 하나를 지우고 링크를 변경하면 된다 |
배열 요소를 검색할 때 | 참조가 빠르다. 주소를 빠르게 찾아갈 수 있다. 검색을 더 빠르게 할 수 있다. | 연결된 주소를 하나씩 찾아가야 하므로, 번거로움을 느낄 수 있다. |
import java.util.*;
class TestLinkedList {
int num; // 값
TestLinkedList linked; // 참조 주소
}
class JavaPractice {
public static void main(String[] args) {
TestLinkedList link1 = new TestLinkedList();
link1.num = 1;
TestLinkedList link2 = new TestLinkedList();
link2.num = 2;
link1.linked = link2; // link1의 linked = link2의 주소값
}
}
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + '\t');
}
for(String s : list) {
System.out.print(s + '\t');
}
for(Iterator<String> itr = list.iterator(); itr.hasNext();) {
System.out.print(itr.next() + '\t');
}
import java.util.*;
class JavaPractice {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> list = new ArrayList<>(); // 정수를 받을 리스트
System.out.print("숫자 입력 : ");
try {
while (true) {
int num = sc.nextInt();
if (num < -1) { // 음의 정수를 입력했을 때
System.out.println("잘못된 입력입니다. 양의 정수를 입력하세요.");
continue;
} else if (num == -1) { // -1이면 break;
System.out.println("리스트 입력 완료");
break;
} else {
list.add(num);
}
}
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
System.out.print("리스트 : ");
for (int i : list) {
System.out.print(i);
System.out.print(" ");
}
int max = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) > max) {
max = list.get(i);
}
}
System.out.println();
System.out.println("배열 중의 큰 수 : " + max);
}
}
[Console]
숫자 입력 : 47
숫자 입력 : 28
숫자 입력 : 63
숫자 입력 : 90
숫자 입력 : -1
리스트 입력 완료
리스트 : 47 28 63 90
배열 중의 큰 수 : 90
import java.util.*;
class JavaTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<String> gradelist = new ArrayList<>(); // 학점을 담을 리스트
System.out.print("학점 : ");
for (int i = 1; i <= 6; i++) {// 6번 반복 입력해서 학점 입력하기
String grade = sc.next();
if (grade.trim().toUpperCase().equals("A") || grade.trim().toUpperCase().equals("B")
|| grade.trim().toUpperCase().equals("C") || grade.trim().toUpperCase().equals("D")
|| grade.trim().toUpperCase().equals("F")) { // grade가 A, B, C, D, F일때만 OK
gradelist.add(grade.trim().toUpperCase());
} else {
System.out.println(i + "번째 : 입력 오류");
i--;
}
}
/*
System.out.print("리스트 : ");
for (int i = 0; i < 6; i++) {
System.out.print(gradelist.get(i));
}
System.out.println();
*/
double sum = 0.0;
for (int i = 0; i < gradelist.size(); i++) {
if (gradelist.get(i).equals("A")) {
sum += 4.0;
} else if (gradelist.get(i).equals("B")) {
sum += 3.0;
} else if (gradelist.get(i).equals("C")) {
sum += 2.0;
} else if (gradelist.get(i).equals("D")) {
sum += 1.0;
} else {
sum += 0.0;
}
}
System.out.println("평균 : " + (sum / 6));
}
}
[Console]
학점 : a c a b f d
평균 : 2.3333333333333335