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' 입니다.