프로그래밍/JAVA 자바

List / ArrayList / LinkedList / Set

Heidong 2021. 8. 1. 23:43
반응형
package ex0730;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Ex01_List {

	public static void main(String[] args) {
		/*
		 * ArrayList
		 * 1. 추가와 삭제가 빈번한 경우 성능 저하
		 * 2. 검색시 속도가 빠름
		 * 3. 동기화 되지 않음(멀티 스레드에서 안전 X )
		 * ===============================================
		 * LinkedList
		 * 1. 추가와 삭제가 빈번한 경우 ArrayList보다 속도가 빠름
		 * 2. 검색은 느림
		 * 3. 동기화 되지 않음(멀티 스레드에서 안전 X )
		 */
		
		List<String> list1 = new ArrayList<String>();
		list1.add("java");
		list1.add("오라클");
		list1.add("서블릿");
		System.out.println("ArryList");
		print(list1);
		
		List<String> list2 = new LinkedList<String>();
		list2.add("서울");
		list2.add("부산");
		list2.add("대구");
		System.out.println("LinkedList");
		print(list2);
		

	}
	
	public static void print(List<String> list) { //위에 2개의 리스트를 메소드 하나가지고 출력하기 위해서 위에서 업 캐스팅을 해준다.
		for(String s : list) {
			System.out.println(s + " ");
		}
		System.out.println();
	}

}

 

 

 

Set

package ex0730;

import java.util.HashSet;
import java.util.Set;

/*
 * Set
 * 순서를 유지하지 않음
 * 중복을 허용하지 않음
 * null은 하나만 등록 가능
 * =====================
 * 구현 클래스 = HashSet, LinkedHashSet, TreeSet
 * =====================
 * HashSet
 * Set 인터페이스 구현 클래스
 * 순서를 유지하지 않음
 * 중복을 허용하지 않음
 * =====================
 * LinkedHashSet
 * HashSet 하위 클래스
 * 중복 허용하지 않음
 * 순서 유지
 * =====================
 * TreeSet
 * SortedSet 인터페이스 구현
 * 정렬된 순서에 의해서 반복
 * 중복 허용 안함
 * Comparable 인터페이스 구현 클래스만 추가 가능 
 * 
 */
public class Ex03_Set {

	public static void main(String[] args) {
		//순서 유지 안됨, 중복 안됨 - HashSet
		
		Set<String> set = new HashSet<String>();
		set.add("서울");
		set.add("부산");
		set.add("대구");
		set.add("인천");
		set.add("광주");
		set.add("서울"); // 이전 서울 값을 덮어쓴다.(중복을 허용하지 않으니까)
		set.add("대전");
		set.add("울산");
		set.add("세종");
		System.out.println(set);
		
		System.out.println("전체 출력");
		for(String s : set) {
			System.out.print(s+" ");
		}
		System.out.println();
		

	}

}

Set의 종류

HastSet - 순서 유지 안되고 중복 불가

LinkedHashSet - 순서 유지는 가능 중복 불가

TreeSet - 값들을 정렬함 중복 불가

 

 

 

Set을 활용해서 로또 프로그램 만들기

package ex0730;

import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class Ex06_Lotto {

	public static void main(String[] args) {
		// Set을 이용해서 로또 프로그램 만들기
		// 1~45사이의 난수 6개 출력
		
		Set<Integer> set = new TreeSet<Integer>();
		
		Random rnd = new Random();
		
		int n;
		
		while(set.size() < 6) {
			n = rnd.nextInt(45)+1;
			set.add(n);
		}
		
		for(int a : set) {
			System.out.print(a + " ");
		}
		System.out.println();

	}

}

 

List 구현 클래스

package ex0730;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Vector;

public class Ex07 {

	public static void main(String[] args) {
		// List구현 클래스 동기화 지원
		
		Vector<String> list = new Vector<String>();
		System.out.println("초기 버퍼 용량 : " + list.capacity()); //10
		
		list.add("서울");
		list.add("부산");
		list.add("대구");
		list.add("인천");
		list.add("광주");
		list.add("대전");
		list.add("울산");
		list.add("세종");
		list.add("강원");
		list.add("경기");
		list.add("경상");
		list.add("전라");
		list.add("제주");
		System.out.println("버퍼 용량 : " + list.capacity()); // 20
		System.out.println("데이터 개수 : " + list.size()); //13
		
		// 버퍼용량을 데이터 개수로
		list.trimToSize();
		System.out.println("버퍼 용량 : " + list.capacity()); // 13
		
		System.out.println("전체 출력 1번");
		for(String s : list) {
			System.out.println(s+" ");
		}
		System.out.println();
		
		// Enumeration = Vector는 사용 가능하지만 List,ArrayList는 사용 불가
		System.out.println("전체 출력 2번");
		Enumeration<String> e = list.elements();
		
		while(e.hasMoreElements()) {
			String s = e.nextElement();
			System.out.print(s + " ");
		}
		System.out.println();
		
		System.out.println("전체 출력 3번");
		Iterator<String> it = list.iterator();
		while(it.hasNext()) {
			String s = it.next();
			System.out.print(s+" ");
		}
		System.out.println();
		
		System.out.println("전체 출력 4번");
		ListIterator<String> it2 = list.listIterator();
		while(it2.hasNext()) {
			String s = it2.next();
			System.out.print(s+" ");
		}
		System.out.println();

		System.out.println("전체 출력 5번");
		for(int i=0; i<list.size(); i++) {
			String s = list.get(i);
			System.out.print(s+" ");
		}
		System.out.println();
	
	}
	

}

 

 

List의 순차 검색, 정렬, 이분 검색, 역순 정렬

package ex0730;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Ex08 {
	public static void main(String[] args) {
		
		List<String> list = new ArrayList<String>();
		
		list.add("서울");
		list.add("부산");
		list.add("대구");
		list.add("인천");
		list.add("광주");
		list.add("대전");
		list.add("울산");
		list.add("세종");
		list.add("강원");
		list.add("경기");
		list.add("경상");
		list.add("전라");
		list.add("제주");
		
		System.out.println(list);
		
		int idx;
		
		// 순차 검색
		idx = list.indexOf("경기"); //없으면 -1
		System.out.println("경기 검색 결과 : " + idx + " 인덱스에 존재");
		
		// 가나다 정렬(크기순) - Comparable 인터페이스 구현 클래스만 가능
		Collections.sort(list);
		System.out.println("오름차순 정렬 후:"+list);
		
		// 이분검색(정렬되어 있어야 가능) : 없으면 -1 반환
		idx = Collections.binarySearch(list, "서울");
		System.out.println("서울 이분검색 결과 : "+idx+" 인덱스에 존재");
		
		// 역순(내림차순 정렬)
		Collections.sort(list, Collections.reverseOrder());
		System.out.println("내림차순 정렬 후 : "+ list);
		
		
		
	}
}

 

 

반응형