Week3 lab

나현·2026년 9월 21일

java2

목록 보기
3/8

#lab04

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListText {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<>();
		
		list.add("Milk");
		list.add("Bread");
		list.add("Butter");
		list.add(1,"Apple");
		list.set(2, "Grape");
		list.remove(3);
		
		for (String s:list) {
			System.out.println(s);
		}
		System.out.println("------");
		
		list.forEach(s->System.out.println(s));
		System.out.println("------");
		
		list.forEach(System.out::println);
		System.out.println("------");
		
		List<Integer>num = new ArrayList<Integer>();
		num.add(1);
		num.add(2);
		num.add(3);
		num.add(4);
		
		Iterator<Integer>e = num.listIterator();
		while (e.hasNext()) {
			System.out.println(e.next());
		}
	}

}

#lab04변형

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListText {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<String>();
		
		list.add("I");
		list.add("Hate");
		list.add("Her");
		list.add(3,"Jacket");

		list.remove(3);
		list.set(1, "Love");
		list.set(2, "You");
		
		
		//for-each
		for (String l : list) {
			System.out.print(l);
			System.out.print(" ");
		}
		System.out.println("");
		//Iterator
		Iterator<String> i = list.iterator();
		while (i.hasNext()) {
			System.out.print(i.next());
			System.out.print(" ");
		}
		System.out.println("");
	}
	
}코드를 입력하세요

for-each와 Iterator 두 개를 사용해봤을 때, 나에게는 Iterator를 사용하는것이 더 직관적으로 이해가 잘 되는 것 같다.
ArrayList에 직접 요소를 삭제하고 수정하고 추가해보면서 가변 크기를 가진 ArrayList의 특징을 직접 경험해보았다.

Q. ArrayList는 단방향리스트이고, LinkedList는 양방향 리스트인데, 요소를 추가/삭제하였을 때 단방향/양방향이 나타내는 차이는 뭘까?

A. ArrayList는 동적배열 -> 데이터가 꽉 찬 책장 중간에 새 책을 꽂는 것과 같음!

  • 초기상태: [A][B][C]
  • 추가과정: A와 B 사이에 X를 넣으려면, B 이후의 모든 데이터를 한 칸씩 뒤로 밀어내는 물리적인 이동이 필요함.
  • 결과: [A][X][C]
  • 단점: 데이터를 뒤로 밀어내는 작업이 발생하므로, 리스트의 요소가 많을수록 추가 작업이 무거워짐.
    LinkedList는 정적배열 -> 사람들이 다른 사람을 손가락으로 가리키는 것과 같음!(포인터 사용)
  • 초기상태: [A]->[B]->[C]
  • 추가과정: A와 B 사이에 X를 넣으려면, X가 B를 가르킨다(X->B). 그 후에 기존 A가 B를 가르키고 있던 화살표를 끊고 A->X로 바꾼다.
  • 결과: [A]->[X]->[B]->[C]
  • 장점: 데이터를 밀어낼 필요 없이, 화살표만 끊고 이어붙이면 됨.

#lab05

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Main {
	public static <E> void show(Set<E> s) {
		for(E e : s) System.out.print(e + " ");
		System.out.println("\n--------------------");
		
		Iterator<E> it = s.iterator();
		while (it.hasNext()) {
			System.out.print(it.next()+",");
		}
		System.out.println("\n---------------------");
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Hello World");
		
		Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1,2,3,4,5));
		Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3,4,5,6,7));
		Set<Integer> set3 = new HashSet<Integer>(Arrays.asList(5,6,7,8,9));
		Set<Integer> set4 = new HashSet<Integer>(Arrays.asList(8,9,10,11,12));
		Set<Integer> set5 = new HashSet<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12));
		
		
		set1.addAll(set2);
		set2.retainAll(set3);
		set3.removeAll(set4);
		set4.removeAll(set3);
		set5.containsAll(set4);
		
		show(set1);
		show(set2);
		show(set3);
		show(set4);
		show(set5);
	
	}

}


#lab06

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Main {
	public static <K,V> void show(Map<K, V> map) {
		System.out.println("----------------");
		
		Set<K> keys = map.keySet(); //key 집합
		System.out.println("Key:" + keys);
		Collection<V> values = map.values(); //value collection
		System.out.println("Values: "+values);
		
		Set<Map.Entry<K, V>> entrySet = map.entrySet(); //key와 value집합
		System.out.println("Key : Values");
		System.out.println("---------------------");
		
		for (Entry<K, V> entry : entrySet) {
			System.out.println(entry.getKey() + ": "+entry.getValue());
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<Integer, String> map = new HashMap<Integer, String>();
		
		for (int i = 0; i < 10; i++) {
			map.put(i, "data#"+i);
		}
		
		System.out.println(map);
		System.out.println("map.get(111): "+map.get(111));
		map.put(111, "data#111");
		map.remove(1);
		map.remove(2);
		map.put(3, "new_data#3");
		System.out.println(map);
		
		show(map);
		
		
	}

}

Q. 왜 key는 Set으로 받고, value는 Collection으로 받을까?

key는 중복을 허용하지 않고(Set), value는 중복을 허용하기 때문(Collection)이다.
그 아래 entrySet 역시 키-값의 쌍은 전체 map 안에서 절대 중복되지 않기 때문에 EntrySet을 이용해 Set형태로 받는다.

0개의 댓글