컬렉션 프레임워크
자바는 자료구조를 사용해서 객체들을 효울적으로 추가, 삭제, 검색할 수 있도록 인터페이스와
구현 클래스를 java.util. 패키지에서 제공한다. 이들을 전부 컬렉션 프레임워크라고 한다.
컬렉션 프레임워크의 주요 인터페이스로는 List, Set, Map이 있다.
이 글에서는 List의 ArrayList에 대해 다뤄보고자 한다.
ArrayList
배열과 비슷하게 객체를 인덱스로 관리한다. 하지만 배열과의 차이점이 있다.
List는 저장 용량이 자동으로 증가하며, 객체를 저장할 때 자동으로 인덱스가 부여된다.
그리고 추가, 삭제, 검색을 위한 다양한 메소드들이 제공된다.
ArrayList 메소드
1. add()
데이터를 리스트에 저장할 수 있다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add(0, "orange"); // 첫번째 자리에 추가하기
System.out.println(fruit);
}
}
// 결과
[orange, banana, apple]
2. get()
특정 인덱스의 값을 추출할 수 있다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
System.out.println(fruit.get(1));
}
}
// 결과
apple
3. size()
ArrayList의 갯수를 리턴할 수 있다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
System.out.println(fruit.size());
}
}
// 결과
3
4. contatins
리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴할 수 있다.
포함하고 있다면 true를 리턴하고, 포함하고 있지 않다면 false를 리턴한다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
System.out.println(fruit.contains("apple"));
System.out.println(fruit.contains("grape"));
}
}
// 결과
true
false
5. 리스트 안에 해당 항목 삭제하기
- remove(객체)
리스트에서 객체에 해당하는 항목을 삭제하고 삭제한 결과를 boolean으로 리턴한다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
System.out.println(fruit.remove("apple"));
System.out.println(fruit.remove("grape"));
System.out.println(fruit);
}
}
// 결과
true
false
[banana, orange]
- remove(인덱스)
해당 인덱스의 항목을 삭제하고 삭제된 항목을 리턴한다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
System.out.println(fruit.remove(1));
System.out.println(fruit);
}
}
// 결과
apple
[banana, orange]
제네릭(Generic)
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
// String f1 = fruit.get(1); // 오류 발생
String f2 = (String) fruit.get(1);
System.out.println(f2);
}
}
// 결과
apple
위의 코드처럼 제너릭을 사용하지 않을 경우 ArrayList 안에 추가되는 객체는 Object 자료형으로 인식된다.
Object 자료형은 모든 객체가 상속하고 있는 가장 기본적이고 최상위 자료형이다.
따라서 ArrayList 객체인 fruit에 값을 넣을 때는 문제가 안되지만 값을 가져올 때는
f2와 같이 항상 Object 자료형에서 String 자료형으로 형변환을 해주도록 한다.
근데 fruit 안에는 String 객체 이외의 다른 객체도 추가할 수 있기 때문에 잘못된 형변환으로 인한
오류가 발생할 수도 있다. 그래서 우리는 여기서 아래처럼 제네릭을 사용하여 오류를 줄일 수 있다.
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList<String> fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
String f1 = fruit.get(1);
System.out.println(f1);
}
}
// 결과
apple
위의 코드 <String>은 ArrayList 안에 담을 수 있는 자료형은 String 타입 뿐이다.라는 것을 의미한다.
따로 형변환이 필요하지 않은 것을 확인할 수 있다.
6. String.join("구분자", 리스트객체)
ArrayList의 각 요소를 콤마(,)로 구분하여 하나의 문자열로 만들 수 있다.
- join을 사용하지 않을 경우
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList<String> fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
String result = "";
for(int i=0; i<fruit.size(); i++) {
result += fruit.get(i);
result += ",";
}
System.out.println(result.length());
// 0번째 인덱스부터 19번째까지자른다.
result = result.substring(0, result.length() - 1); // 마지막 , 제거
System.out.println(result);
}
}
// 결과
20
banana,apple,orange
- join을 사용할 경우
import java.util.ArrayList;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList<String> fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
String result = String.join(",", fruit);
System.out.println(result);
}
}
// 결과
banana,apple,orange
String.joun()을 사용하지 않을 때보다 코드가 훨씬 간결해진 것을 볼 수 있다.
7. sort
리스트를 오름차순 및 내림차순으로 정렬할 수 있다.
import java.util.ArrayList;
import java.util.Comparator;
public class ArrayListEx {
public static void main(String[] args) {
ArrayList<String> fruit = new ArrayList();
fruit.add("banana");
fruit.add("apple");
fruit.add("orange");
fruit.sort(Comparator.naturalOrder()); // 오름차순으로 정렬하기
System.out.println(fruit);
fruit.sort(Comparator.reverseOrder()); // 내림차순으로 정렬하기
System.out.println(fruit);
}
}
// 결과
[apple, banana, orange]
[orange, banana, apple]
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] 문자 기반 입출력 스트림 (2) (1) | 2023.06.05 |
---|---|
[JAVA] 바이트 기반 입출력 스트림 (1) (0) | 2023.06.04 |
[JAVA] 예외 처리 (0) | 2023.05.21 |
[JAVA] final과 상수(static final) (0) | 2023.05.21 |
[JAVA] 익명 함수와 람다 함수 (0) | 2023.05.21 |