day20_ArrayListEx2

육희영·2021년 11월 1일
0
package com.java1.day20;

import java.util.ArrayList;

public class ArrayListEx2 {
	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		
		list.add("카라");	// ArrayList의 마지막에 객체를 추가..
		list.add("소녀시대");
		list.add("원더걸스");
		list.add(new String("야호"));
		
		//subList(int fromIndex, int toindex) fromIndex부터 toIndex사이에 저장된 객체를 반환.
		ArrayList list2 = new ArrayList(list.subList(1, 4));	// 1<= list <4
		print(list, list2);
		
		//containsAll(Collection c) 지정된 Collection(c)의 모든요소가 ArrayList에 포함되어 있는지 확인. 
		boolean b = list.containsAll(list2);
		System.out.println(b);
		System.out.println();
		
		list2.add("B");	//list2의 마지막에 "B" 추가.
		list2.add("C"); //list2의 마지막에 "C" 추가.
		list2.add("A"); //list2의 마지막에 "A" 추가.
		print(list, list2);
		
		System.out.println();
		
		list2.set(3, "AA");	// index값 3인 위치에 있는 element를 "AA"로 변경한다.
		print(list, list2);
		
		System.out.println("retainAll 하기전 list1 : "+list);
		list.retainAll(list2);	// list에서 list2와 겹치는 부분만 남기고 나머지는 삭제한다.
		print(list, list2);
		
		//왜 뒤에서 부터 삭제를 시작 하고 있을까?
		//앞의 예제 ArrayListEx1 에 그 해답이 있다.
		//리스트의 특성인 삭제시 앞의 배열의 위치로 이동하는 특성으로 인해
		//앞에서 부터 지우게 되면 맨 마지막 위치에 있는 데이터는 영원히 안지워 지게 된다.그래서 뒤에서 부터 지운다.
		for(int i= list2.size()-1; i>=0; i--) {	//리스트의 뒤에서 부터 삭제한다.
			if(list.contains(list2.get(i))) {	// list2의 i번째 요소를 읽어와서 list에 
												// 그 요소가  존재 하는지를 리턴한다.
				list2.remove(i);	// list2의 i번째 요소를 삭제한다.
			}
		}
		print(list, list2);
		
	}
	
	static void print(ArrayList list1, ArrayList list2) {
		System.out.println("list1:" + list1);
		System.out.println("list2:" + list2);
		System.out.println();
	}
}

출력결과

list1:[카라, 소녀시대, 원더걸스, 야호]
list2:[소녀시대, 원더걸스, 야호]

true

list1:[카라, 소녀시대, 원더걸스, 야호]
list2:[소녀시대, 원더걸스, 야호, B, C, A]


list1:[카라, 소녀시대, 원더걸스, 야호]
list2:[소녀시대, 원더걸스, 야호, AA, C, A]

retainAll 하기전 list1 : [카라, 소녀시대, 원더걸스, 야호]
list1:[소녀시대, 원더걸스, 야호]
list2:[소녀시대, 원더걸스, 야호, AA, C, A]

list1:[소녀시대, 원더걸스, 야호]
list2:[AA, C, A]

0개의 댓글

관련 채용 정보