ArrayList에서 사용 가능한 메서드들에 대해 알아보자.
2022.11.28 - [초보 개발자의 스터디룸] - [Java] ArrayList - 1(생성)
위에서 사용된 예제를 이용.
import java.util.*;
public class Q {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10); //1
list1.add(5);
list1.add(4);
list1.add(2);
list1.add(0);
list1.add(1);
list1.add(3);
ArrayList list2 = new ArrayList(list1.subList(1, 4)); //1
print(list1, list2);
Collections.sort(list1); //2
Collections.sort(list2);
print(list1, list2);
System.out.println("list1.containAll(list2) : "+ list1.containsAll(list2)); //3
list2.add("B");
list2.add("C");
list2.add(3,"A"); //4
print(list1, list2);
list2.set(3, "AA"); //5
print(list1, list2);
System.out.println("list1.retainAll(list2) : " +list1.retainAll(list2)); //6
print(list1, list2);
for(int i=list2.size()-1; i>=0; i--) {
if(list1.contains(list2.get(i))) {
list2.remove(i); //7
}
}
print(list1, list2);
}
static void print (ArrayList list1, ArrayList list2) {
System.out.println("list1 : " + list1);
System.out.println("list2 : " + list2);
System.out.println();
}
}
//1 : subList
List<E> subList(int fromIndex, int toIndex);
fromIndex부터 toIndex 사이에 저장된 객체를 반환
예시)를 통해 알아보자
//예시)
ArrayList list1 = new ArrayList(10);
list1.add(5);
list1.add(4);
list1.add(2);
list1.add(0);
list1.add(1);
list1.add(3);
ArrayList list2 = new ArrayList(list1.subList(2, 5));
System.out.println(list1);
System.out.println(list2);
//⦿ add, remove
list2.add(100);
list2.remove(0);
System.out.println(list1);
System.out.println(list2);
✓ list1 출력 결과 : [5, 4, 2, 0, 1, 3]
✓ list2 출력 결과 : [2, 0, 1]
// ⦿ add, remove 이후 : add(//1.1) remove(//1.2) 본문 하단에서 추가적으로 확인!
✓ list1 출력 결과 : [5, 4, 2, 0, 1, 3]
✓ list2 출력 결과 : [0, 1, 100]
즉 index 상 2번째 부터 5번째 전인 4번째까지 저장된다.
전 포스팅에서 확일할 수 있듯이 ArrayList는 List 인터페이스 내 구현 클래스 중 하나이다.
ArrayList 클래스 내 list1에서 subList를 사용해 list2를 저장할 경우 상호 간 영향을 주지 않는다.
하지만 List 인터페이스로 list1을 만들어 subList를 사용해 list2를 저장할 경우 상호 간 영향을 미친다.
List 인터페이스를 이용해 다시 출력해보자.
//예시)
List<Integer> sub1 = new ArrayList<Integer>();
sub1.add(5);
sub1.add(4);
sub1.add(2);
sub1.add(0);
sub1.add(1);
sub1.add(3);
List<Integer> sub2 = sub1.subList(2, 5);
System.out.println(sub1);
System.out.println(sub2);
//⦿ add, remove
sub2.add(100);
sub2.remove(0);
System.out.println(sub1);
System.out.println(sub2);
//⦿ sub1 수정
sub1.add(0);
System.out.println(sub1);
System.out.println(sub2);
✓ sub1 출력 결과 : [5, 4, 2, 0, 1, 3]
✓ sub2 출력 결과 : [2, 0, 1]
// ⦿ add, remove 이후
✓ sub1 출력 결과 : [5, 4, 2, 0, 100, 3]
✓ sub2 출력 결과 : [0, 1, 100]
//⦿ sub1 수정 이후
✓ sub1 출력 결과 : [5, 4, 2, 0, 100, 3, 0]
✓ sub2 출력 결과 : Exception in thread "main" java.util.ConcurrentModificationException : 오류
위 결과와 다르게 sub1의 정보가 수정되었다.
즉, List 인터페이스에서 subList 메서드를 사용하게되면 참조 받던 sub2가 수정시 sub1도 함께 수정된다.
또한, sub1로부터 subList로 참조 받던 sub2는 sub1이 수정 시 오류가 출력되는 것을 알 수 있다.
//1.1 및 //4 : add
void add(int index, Object element);
지정된 위치(index)에 객체를 저장
위에 저장된 list1에 add 메서드를 이용해 값을 추가시켜보자.
예시)를 통해 알아보자
list1.add(1,"test");
System.out.println(list1);
list1.add(9);
System.out.println(list1);
//⦿ addAll vs add
list1.addAll(list2);
System.out.println(list1);
✓ sub1 출력 결과 : [5, test, 4, 2, 0, 1, 3]
✓ sub1 출력 결과 : [5, test, 4, 2, 0, 1, 3, 9]
index를 선언하지 않으면 마지막에 추가
index 선언 시 index 위치에 element가 삽입
//⦿ addAll vs add 이후
✓ sub1 출력 결과 : [5, test, 4, 2, 0, 1, 3, 9, 0, 1, 100]
만약 list1.add(list2);로 설정한다면
✓ sub1 출력 결과 : [5, test, 4, 2, 0, 1, 3, 9, [0, 1, 100]]
//1.2 및 //7 : remove
ArrayList list1 = new ArrayList(10);
list1.add(5);
list1.add(4);
list1.add(2);
list1.add(0);
list1.add(1);
list1.add(3);
ArrayList list2 = new ArrayList(10);
list2.add(4);
list2.add(2);
//⦿ removeAll vs remove
list1.removeAll(list2);
//⦿ removeAll vs remove 이후
✓ sub1 출력 결과 : [5, 0, 1, 3]
만약 list1.remove(1); 으로 설정한다면
✓ sub1 출력 결과 : [5, 2, 0, 1, 3]
'초보 개발자의 스터디룸' 카테고리의 다른 글
[Mac M1] 소소한 맥북 무료 앱 추천(AltTab, Hidden Bar 등) (0) | 2022.12.08 |
---|---|
[Java] 오름차순과 내림차순(sort, reverseOrder, reverse) (0) | 2022.12.04 |
[Java] ArrayList - 1(생성) (0) | 2022.11.28 |
[Java] Collections Framework(List, Set, Map)이란? (1) | 2022.11.28 |
[Java] Split() 함수 (0) | 2022.11.28 |