🚀 Programming/JAVA+Spring+JavaScript

[Java] ArrayList의 출력/addAll()/ removeAll()/ retainAll()

DSHU 2022. 8. 28. 18:36
728x90
반응형

ArrayList에 대해 공부하기 전에

자바의 Collection Framework에 대해 잠깐 정리.

컬렉션 프레임워크란 쉽게 말하면 데이터를 효과적으로 처리하고 저장할 수 있도록

데이터 처리 알고리즘을 클래스로 구현해 놓은 것이다.

컬렉션프레임워크의 주요 인터페이스는  List, Set, Map이 있다.

이런 인터페이스들을 구현해주는 클래스를 컬렉션클래스라고 부른다.

예를들어, List는 순서가 있는 데이터의 집합이고 중복을 허용하는 인터페이스이다.

그리고 List를 구현하는 컬렉션클래스로는 Vector, ArrayList, LinkedList, Stack, Queue 가 있다.

 

이번페이지에서 정리할 클래스는 ArrayList.

ArrayList는 이름에서 알 수 있듯, 배열을 이용한다. 따라서 인덱스를 이용한 접근이 가능하다.

Array는 원래 한번 정해진 크기를 변경할 수 없다는 단점이 있다.

그러나 ArrayListst는 크기를 지정하지 않아 정해진 크기의 제한을 받지 않는다.

그러나 데이터의 변화가 생기게 되면 새로운 배열을 생성하고 요소들을 옮겨야하기 때문에

수행시간이 길어진다는 단점이 있다.

 

List 인터페이스-ArrayList(상속받는 클래스)
 1. 여러가지 자료형의 data를 모두 저장 가능 ex) int, double, char, boolean, String etc
 2.입력한 순서대로 출력.(index번호 순으로 저장됨) 
 3. 중복된 data를 저장할 수 있다. 
 4.배열의 장점과 배열에서 사용할 수 없는것을 사용할 수 있다 
 5.동적인 저장구조를 이용할 수 있다. add(); 더하기 remove(); 제거 set(); 교체

 

ArrayList의 출력방법

우선 ArrayList list를 하나 만들고 자료를 몇개 넣었다. add() 이용.

// 업캐스팅(상속해준 메소드만 사용가능)
		List list = new ArrayList();
		// ArrayList list=new ArrayList();
		// 자료추가
		list.add("하나");
		list.add(2);
		list.add(false);
		list.add(3.42);
		list.add("넷");
		list.add("five");
		list.add('A');

 

출력방법1. 해당객체명으로 출력

		System.out.println(list);
		System.out.println(list.toString());

실행하면 아래와 같은 결과를 얻게된다.

[하나, 2, false, 3.42, 넷, five, A]
[하나, 2, false, 3.42, 넷, five, A]

 

출력방법2. get() 메소드 이용

System.out.println("데이터개수=" + list.size()); 
        	// size() : 데이터 갯수 구하는 메소드(7출력)
		
		for (int i = 0; i < list.size(); i++) {
			System.out.println(i + "번째 요소 " + list.get(i));
		}

 

 

array의 크기를 구할때는 length()를 사용했다.

arrayList에서는 size()를 사용한다.

arrayList 역시 array처럼 인덱스로 접근이 가능하다.

따라서 get(인덱스) 하게 되면 해당 인텍스의 데이터를 가져온다.

역시 배열과 마찬가지로 인덱스는 0부터 시작.

데이터개수=7

0번째 요소 하나
1번째 요소 2
2번째 요소 false
3번째 요소 3.42
4번째 요소 넷
5번째 요소 five
6번째 요소 A

 

출력방법3. get() 메소드 이용2 (get()메소드의 반환형은 object)

		for (int i = 0; i < list.size(); i++) {
			Object s = list.get(i);
			System.out.println(s);
		}

 

출력방법4. Iterator 인터페이스 사용

Iterator elements = list.iterator();
//hasNext 읽어올 요소가 있는지 확인
		while (elements.hasNext()) {
			System.out.println(elements.next());
			// next()메소드를 이용해서 차례대로 한개씩 데이터 가져옴
		}

 

출력방법5. 향상된 for문 사용

for (Object a : list)
			System.out.println(a);

 

출력방법 3,4,5 모두 실행 결과는 아래와 같다.

 

하나
2
false
3.42
넷
five
A

 

arrayList의 addAll, removeAll, retainAll

1. addAll : 합집합

arrayList 두개(list1, list2)를 만들고 자료를 넣는다.

그리고 list2에 list1을 addAll 해본다.

ArrayList<String> list1 = new ArrayList<String>();
		list1.add("봄");
		list1.add("여름");

ArrayList<String> list2 = new ArrayList<String>();
		list2.add("봄");
		list2.add("가을");
		list2.add("겨울");

list2.addAll(list1);
		System.out.println(list1);
		System.out.println(list2);

list2=list1+list2 가 된다. (중복되는 값 '봄' 이 걸러지지는 않는다)

[봄, 여름]
[봄, 가을, 겨울, 봄, 여름]

 

2. removeAll : 차집합

이번에도 arrayList 두개를 만들어 아래와 같이 자료를 넣고 removeAll을 해본다.

ArrayList<String> list1 = new ArrayList<String>();
		list1.add("봄");
		list1.add("여름");

ArrayList<String> list2 = new ArrayList<String>();
		list2.add("봄");
		list2.add("봄");
		list2.add("여름");
		list2.add("가을");
		list2.add("겨울");
		
		list2.removeAll(list1);
		System.out.println(list1);
		System.out.println(list2);

list2=list2-list1 가 된다. (list2에 있는 첫번째 봄도, 두번째 봄도 사라진다)

[봄, 여름]
[가을, 겨울]

 

3. retainAll : 교집합

역시 list1, list2를 만들고 retainAll을 해본다.

ArrayList<String> list1 = new ArrayList<String>();
		list1.add("봄");
		list1.add("여름");

ArrayList<String> list2 = new ArrayList<String>();
		list2.add("봄");
		list2.add("봄");
		list2.add("가을");
		list2.add("겨울");

		list2.retainAll(list1); //[봄,봄]
		System.out.println(list1);
		System.out.println(list2);

list2=list1과 list2의 중복되는값을 저장한다. (같은 값이 2개=봄, 봄)

[봄, 여름]
[봄, 봄]
반응형