2022.12.01 JAVA 25일차 Collection(LIst), Stack,Queue

2022. 12. 1. 16:25JAVA

 


컬렉션 프레임워크의 핵심 인터페이스

List : 순서가있는 데이터의 집합 , 데이터의 중복을 허용
구현 클래스 : ArrayList, LinkedList, Stack, Vector 등 

Set : 순서를 유지하지않는 데이터의 집합, 데이터의 중복을 허용하지 않음.
구현 클래스 : Hash, TreeSet  등 

Map : 키(Key)와 값(Value)의 쌍으로 이루어진 데이터의 집합
순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값을 중복을 허용
구현 클래스 : HashMap, TreeMap. Hashtable, Properties 등

키(Kye) 란, 데이터 집합중에서 어떤 값(value)을 찾는데 열쇠(Key)가 되므로
키(Kye) 는 중복을 허용하지 않음

List

배열과 비슷하지만 배열보다 편리한 기능을 많이 가지고 있음.
배열의 경우 크기를 한번 지정하면 사이즈가 고정이되어 변경할 수 가 없지만
리스트의 경우 자료를 넣는만큼 자동적으로 사이즈가 늘어나기 때문에 동적으로 활용하기에 유용함.

ArrayList

컬렉션 프레임워크에서 가장 많이 사용되는 컬렉션 클래스
특징: List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용함
Object배열을 이용하여 데이터를 순차적으로 저장
배열에 순서대로 저장되며, 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해서
기존의 배열 내용을 새로운 배열로 복사한 다음에 저장

예제) List 메서드 활용1

package etc;
import java.util.*; 

public class MySample1201 {

	public static void main(String[] args) {
		//ArrayList
		ArrayList list1 = new ArrayList(10);
		
		list1.add("A");
		list1.add("C");
		list1.add("E");
		list1.add("D");
		
		System.out.println("초기상태 : ");
		System.out.println(list1);
		
		System.out.println("인덱스 1에 B 추가");
		list1.add(1, "B");
		System.out.println(list1);
		
		System.out.println("인덱스2에 값 삭제");
		list1.remove(2);
		System.out.println(list1);
		
		System.out.println("인덱스2번쨰 위치 값 : " + list1.get(2));
		
		System.out.println();
		
		ArrayList list2 = new ArrayList(10);
		
		list2.add(new Integer(5));
		list2.add(new Integer(4));
		list2.add(new Integer(2));
		list2.add(new Integer(0));
		list2.add(new Integer(1));
		list2.add(new Integer(3));
		
		System.out.println("list2 : " + list2);
		
		ArrayList list3 = new ArrayList(list2.subList(1, 4));
		
		print(list2,list3);
		
		
		Collections.sort(list2);
		Collections.sort(list3);
		print(list2,list3);
		
		System.out.println("list2.containAll(list3) : " +  list2.containsAll(list3));				// list2.containsAll(list3)  : list2안에 list3의 요소가 있는가 return : boolean 
		
		list3.add("B");
		list3.add("C");
		list3.add(3,"A");
		print(list2, list3);
		
		list3.add(3,"AA");
		print(list2,list3);
		
		System.out.println("list2.retainAll(list3)  : " + list2.retainAll(list3));					//list2 에서 list3 와  겹치는요소만 남기고 삭제 
		print(list2,list3);
		
		//list3에서 list2에  포함된 객체 삭제
		int i;
		for(i = list2.size()-1; i >=0; i--)
		{
			if(list2.contains(list3.get(i)))
			{
				list3.remove(i);
			}
		}
		
		print(list2,list3);
		
	}
	
	static  void print(ArrayList list2, ArrayList list3)
	{
		System.out.println("list2 : " + list2);
		System.out.println("list3 : " + list3);
		System.out.println();
		
	}
	
}

출력

예제) List 메서드 활용2

package etc;


import java.util.*;

public class MySample1201_2 {

	public static void main(String[] args) {
		
		final int LIMIT  = 10;
		String source = "0123456789abcdefghijklmn";			
		int length = source.length();
		
		System.out.println("length : " + length);
		
		List list = new ArrayList((length/LIMIT)+10);
		List list2 = new ArrayList();
		
		int i;
		
		for(i = 0; i < length; i++)
		{
			if(i + LIMIT < length)
			{
				list.add(source.substring(i, i + LIMIT));
			}
			else
			{
				list.add(source.substring(i));
			}
		}
		
		System.out.println("list.size() : " + list.size()); 
		
		for(i = 0; i < list.size(); i++)
		{
			System.out.println(list.get(i));
		}
	}

}

출력

 

Stack, Queue(자료구조)

스택은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO
큐는 처음에 저장한 데이터를 가장먼저 꺼내게 되는 FIFO

예제) Stack,Queue 자료구조 실습

package etc;

import java.util.*;

public class MySample1201_5 {

	public static void main(String[] args) {
		//Stack, Queue
		Stack st = new Stack();
		Queue q = new LinkedList();			//Queue인터페이스의 구현체인 LinkedList사용
		
		st.push("0");
		st.push("1");
		st.push("2");
		
		q.offer("0");
		q.offer("1");
		q.offer("2");
		
		System.out.println("Stack() ============");
		
		while(!st.empty())				
		{
			System.out.println(st.pop());
		}
		
		System.out.println("Queue() ============");
		
		while(!q.isEmpty())
		{
			System.out.println(q.poll());
		}	
	}

}

출력