프로그래밍/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);
}
}
반응형