[Java] 컬렉션 프레임웤

삶걀·2022년 9월 19일
0

Java

목록 보기
15/15

1.2 ArrayList 클래스

586p. 예제 11-1

import java.util.*;

class Test {
	public static void main(String[] args) {
		ArrayList list1 = new ArrayList(10);
		list1.add(new Integer(5));
		list1.add(new Integer(4));
		list1.add(new Integer(2));
		list1.add(new Integer(0));
		list1.add(new Integer(1));
		list1.add(new Integer(3));
		
		ArrayList list2 = new ArrayList(list1.subList(1,4)); //반환타입이 List이고, 인덱스 1부터 3까지 객체를 반환
		print(list1, list2);
		
		Collections.sort(list1); //지정된 정렬기준으로 ArrayList를 정렬
		Collections.sort(list2);
		//Collections는 클래스, Collection은 인터페이스이다.
		
		print(list1, list2);
		
		System.out.println("list1.containsAll(list2): "+list1.containsAll(list2)); //list1이 list2의 모든 요소를 포함하면 true
		
		list2.add("B");
		list2.add("C");
		list2.add(3, "A"); //A를 3번째에 추가, 나머지는 뒤로 밀려난다.
		print(list1, list2);
		
		list2.set(3, "AA"); //AA를 list2의 3번째에 저장, 기존에 있던 데이터 위에 덮어쓴다.
		print(list1, list2);
		
		System.out.println("list1.retainAll(list2):" + list1.retainAll(list2)); //list2와 공통 요소만 남기고 나머지는 제거한다
		print(list1, list2);
		
		for(int i=list2.size()-1; i>=0; i--) { //배열 길이부터 감소시키면서 각 요소에 접근함, 증가시키면서 접근하면 삭제될 때마다 자리이동이 일어나기 때문.
			if(list1.contains(list2.get(i))) // list1과 list2의 공통 요소가 있으면 list2에서 공통 요소를 모두 지운다.
				list2.remove(i);
		}
		print(list1, list2);
	}
	
	static void print(ArrayList list1, ArrayList list2) {
		System.out.println("list1:"+list1); //ArrayList는 배열 형식으로 출력한다.
		System.out.println("list2:"+list2); //데이터를 넣은 순서대로 출력함
		System.out.println();
	}
}
출력값:
list1:[5, 4, 2, 0, 1, 3]
list2:[4, 2, 0]

list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4]

list1.containsAll(list2): true
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, A, B, C]

list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, AA, B, C]

list1.retainAll(list2):true
list1:[0, 2, 4]
list2:[0, 2, 4, AA, B, C]

list1:[0, 2, 4]
list2:[AA, B, C]





608p. 예제 11-9

import java.util.Scanner;
import java.util.Stack;

public class Ex_JS{
    public static Stack back = new Stack();
    public static Stack forward = new Stack();
    
    public static void main(String[] args) {
    	goURL("1.네이트");
    	goURL("2.야후");
    	goURL("3.네이버");
    	goURL("4.다음");
    	
    	printStatus();
    	
    	goBack();
    	System.out.println("뒤로가기 버튼 누른 후");
    	printStatus();
    	
    	goBack();
    	System.out.println("뒤로가기 버튼 누른 후");
    	printStatus();
    	
    	goForward();
    	System.out.println("앞으로가기 버튼 누른 후");
    	printStatus();
    	
    	goURL("veloge.com");
    	System.out.println("새로운 주소로 이동 후");
    	printStatus();
    	
    }
    
    public static void printStatus() {
    	System.out.println("back:"+back);
    	System.out.println("forward:"+forward);
    	System.out.println("현재화면은 '"+ back.peek()+"' 입니다.");
    	System.out.println();
    	//현재화면은 뒤 스택의 peek로 표현
    }
    
    public static void goURL(String url) { //지정된 주소로 이동할 때
    	back.push(url); //뒤로가기에 url을 저장
    	if(!forward.empty()) //만약 앞 스택이 비어있지 않으면
    		forward.clear(); //앞 스택을 초기화함 
    }
    
    public static void goForward() { //앞으로가기
    	if(!forward.empty())
    		back.push(forward.pop()); //앞 스택에서 꺼내서 뒤 스택에 저장
    }
    
    public static void goBack() { //뒤로가기
    	if(!back.empty()) {
    		forward.push(back.pop()); //뒤 스택에서 꺼내서 앞 스택에 저장
    	}
    }
}

출력값:
back:[1.네이트, 2.야후, 3.네이버, 4.다음]
forward:[]
현재화면은 '4.다음' 입니다.

뒤로가기 버튼 누른 후
back:[1.네이트, 2.야후, 3.네이버]
forward:[4.다음]
현재화면은 '3.네이버' 입니다.

뒤로가기 버튼 누른 후
back:[1.네이트, 2.야후]
forward:[4.다음, 3.네이버]
현재화면은 '2.야후' 입니다.

앞으로가기 버튼 누른 후
back:[1.네이트, 2.야후, 3.네이버]
forward:[4.다음]
현재화면은 '3.네이버' 입니다.

새로운 주소로 이동 후
back:[1.네이트, 2.야후, 3.네이버, veloge.com]
forward:[]
현재화면은 'veloge.com' 입니다.
profile
반숙란 좋아하는사람

0개의 댓글