본문 바로가기

코딩/JAVA

JAVA 29. 컬렉션 프레임워크

Collections 는 데이터의 집합, 그룹이다. Collections가 List와 Set을 가지고있고 Map이 Hashtable, HashMap, SortedMap을 가지고 있다.

Set 인터페이스는 순서를 유지하지않는 데이터 집합으로 데이터의 중복을 허용하지 않는다.

List 인터페이스는 순서가 있는 데이터 집합으로 데이터 중복을 허용한다.

Map 인터페이스는 <키:값>으로 이뤄진 데이터의 집합으로 순서는 없고 키는 unique하며 값은 중복이 가능하다.

 

 

 

package java13;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

class User {
	private String name;
	private int no;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
}

public class Test08 {
	static class NameAscCompare implements Comparator<User>{
		@Override
		public int compare(User x, User y) {
			return x.getName().compareTo(y.getName());
		}
	}
	static class NameDescCompare implements Comparator<User> {
		@Override
		public int compare(User x, User y) {
			return x.getName().compareTo(y.getName());
		}
	}
	static class NoAscCompare implements Comparator<User> {
		// 숫자 오름차순(ASC)
		@Override
		public int compare(User o1, User o2) {	
			return o1.getNo() < o2.getNo() ? 
				-1 : o1.getNo() > o2.getNo() ? 1:0;
		}
	}
	static class NoDescCompare implements Comparator<User> {
		// 숫자 내림차순(DESC)
		@Override
		public int compare(User o1, User o2) {
			return o1.getNo() > o2.getNo() ? 
				-1 : o1.getNo() < o2.getNo() ? 1:0;
		}
	}

	public static void main(String[] args) {
		ArrayList<User> users = new ArrayList<>(); // User 클래스를 끌고옴, 제네릭타입
		User user = new User();							// 일반적인 방법으로 객체생성
		user.setName("고철수");
		user.setNo(1);
		users.add(user);
		user = new User();
		user.setName("박영희");
		user.setNo(2);
		users.add(user);
		user = new User();
		user.setName("감수왕");
		user.setNo(3);
		users.add(user);
		user = new User();
		user.setName("이사람");
		user.setNo(4);
		users.add(user);
		
		System.out.println("===== 정렬 하기 전 =====");
		for (User temp : users) {
			System.out.print(temp.getNo() + " : ");
			System.out.println(temp.getName());
		}
		System.out.printf("\n\n=== 문자 오름차순 정렬 === \n\n");
		Collections.sort(users, new NameAscCompare());
		for (User temp : users) {
			System.out.print(temp.getNo() + " : ");
			System.out.println(temp.getName());
		}
		System.out.printf("\n\n==== 문자 내림 차순 정렬 ====\n");
		Collections.sort(users, new NameDescCompare());
		for (User temp : users) {
			System.out.print(temp.getNo() + " : ");
			System.out.println(temp.getName());
		}
		Collections.sort(users, new NoAscCompare());
		System.out.printf("\n\n==== 숫자 오름 차순 정렬 ====\n");
		for (User temp : users) {
			System.out.print(temp.getNo() + " : ");
			System.out.println(temp.getName());
		}
		Collections.sort(users, new NoDescCompare());
		System.out.printf("\n\n==== 숫자 내림 차순 정렬 ====\n");
		for (User temp : users) {
			System.out.print(temp.getNo() + " : ");
			System.out.println(temp.getName());
		}
	}
}

 

 

정렬은 comparator<T> 인터페이스를 받는 클래스를 만들어 직접 메서드를 작성해준다.

 

 

 

 

 

Collection이 상위기때문에 set, list사이를 넘나든다면 데이터타입으로 쓰기 적합하다.

Collection<Integer> A = new HashSet<>();

 

iterator : 데이터타입형 인터페이스, 객체를 생성해서 사용

A.hasnext()

 A에 값이 있다면

A.next()

 객체의 요소를 호출하며 객체에서 삭제 / 오리지널은 그대로 유지

 

 

 

 

------

 

A.contains(B)

A에 B라는 요소가 포함되었다면 true

 

A.containsall(B)

A에 B리스트가 전부 포함되었다면 true

 

A.add(B)

A에 B를 추가

 

A.addall(B)

A에 B리스트내용을 전부 추가

A.retain(B)

A에 B가 있다면 B만을 A에 담겠다

 

A.retainall(B)

A와 B리스트와의 교집합만을 A에 담겠다

 

A.remove(B)

A에서 B를 제한다

 

A.removeall(B)

A에서 B리스트와의 교집합을 전부 제한다

'코딩 > JAVA' 카테고리의 다른 글

JAVA 29-2. 컬렉션 프레임워크 - List  (0) 2022.08.08
JAVA 29-1. 컬렉션 프레임워크 - MAP  (0) 2022.08.08
JAVA 28-1. 쓰레드2  (0) 2022.08.08
JAVA 28. 쓰레드  (0) 2022.08.08
JAVA 27. 예외  (0) 2022.08.08