본문 바로가기
Java

컬렉션(Collection) - List

by ZIAHO 2021. 10. 12.

컬렉션(Collection)

1. 컬렉션 : 데이터의 그룹을 다루고 표현하기 위해 단일화된 구조. 자바에서 제공하는 자료구조를 담당하는 프레임워크. 추가, 삭제, 정렬 등의 기능처리가 간단하게 해결되어 자료구조적 알고리즘을 구현할 필요가 없다.

 

2. 배열의 단점 vs 컬렉션의 장점

배열 컬렉션
한번 크기를 지정하면 변경할 수 없다. 저장하는 크기의 제약이 없다.
기록된 데이터데 대한
중간 위치의 추가, 삭제가 불편하다.
추가, 삭제, 정렬 등의 기능처리가 간단하게 해결된다.
한 타입의 데이터만 저장이 가능하다. 여러 타입의 데이터가 저장 가능하다.

 

 

Collection - List 인터페이스

1. 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다.

// 중복이 가능하고 저장순서가 유지된다.
ArrayList foods = new ArrayList();
foods.add("초밥");
foods.add("국밥");
foods.add("초밥");
foods.add("초밥");
foods.add("초밥");
System.out.println(foods);

// 결과
[초밥, 국밥, 초밥, 초밥, 초밥]

 

2. ArrayList : List의 후손으로 default 저장용량은 10이나 따로 설정 가능하며, 저장 용량을 초과한 객체들이 들어오면 자동으로 증가한다.(고정도 가능하다.)

 

3. add(객체) : ArrayList의 마지막에 객체를 추가 / add(index, 객체) : 지정한 위치에 객체 저장 

// add() : ArrayList에 마지막에 객체를 추가
list.add("차범근");
list.add("박지성");
list.add("손흥민");
list.add("이강인");
System.out.println(list);
// add(index, 객체) : index 위치에 객체를 추가
list.add(1, "이영표");
System.out.println(list);
        
// 결과
[차범근, 박지성, 손흥민, 이강인]
[차범근, 이영표, 박지성, 손흥민, 이강인] // "이영표"가 1번 인덱스에 추가됨

 

4. get(index) : 리스트의 지정한 인덱스 번호에 저장된 객체 값 반환

// get(index) : index번호에 저장된 객체 값 반환
list.get(3); // 3번인덱스에 저장 된 값 반환하기
System.out.println(list.get(3)); // 3번 인덱스에 저장된 값 출력하기

// 결과
손흥민

 

5. set(index, 수정내용) : 인덱스 번호에 저장 된 값 수정

// set(index, 수정데이터) : index번호에 저장된 객체 값 수정
System.out.println(list);
list.set(2, "이청용"); // 2번인덱스의 값을 이청용으로 수정
System.out.println(list);

// 결과
[차범근, 이영표, 박지성, 손흥민, 이강인]
[차범근, 이영표, 이청용, 손흥민, 이강인]

 

6. remove(index || 객체) : 인덱스 번호에 저장된 값 삭제

    ⭐ 매개변수로 객체를 사용하는 경우에는 비교클래스에 equals()메소드가 오버라이딩 되어있어야 한다.

// remove(index) : 인덱스번호에 저장된 데이터 삭제
System.out.println(list);
list.remove(4);
System.out.println(list);

// 결과
[차범근, 이영표, 이청용, 손흥민, 이강인]
[차범근, 이영표, 이청용, 손흥민]

 

7. contains(매개변수) : 리스트 저장소에 매개변수와 일치하는 것이 있는지 확인(boolean)

    ⭐ 매개변수로 객체를 사용하는 경우에는 찾을클래스에 equals()메소드가 오버라이딩 되어있어야 한다.

// contains(매개변수) : 리스트저장소에 매개변수와 일치하는 값이 있는지 확인(boolean 반환)
System.out.println(list);
boolean flag = list.contains("이영표");
System.out.println(flag);

// 결과
[차범근, 이영표, 이청용, 손흥민]
true

 

8. isEmpty() : 리스트에 데이터가 있는지 여부 확인(boolean)

// isEmpty() : 리스트에 데이터가 있는지 여부 확인
System.out.println(list);
System.out.println(list.isEmpty());
list.removeAll(list);
System.out.println(list);
System.out.println(list.isEmpty());

// 결과
[차범근, 이영표, 이청용, 손흥민]
false
[]
true

 

9. indexOf(매개변수) : 매개변수와 일치하는 객체의 인덱스 번호를 반환한다.

    ⭐ 매개변수로 객체를 사용하는 경우에는 찾을클래스에 equals()메소드가 오버라이딩 되어있어야 한다.

// indexOf(매개변수) : 매개변수와 일치하는 객체의 인덱스 번호를 반환
System.out.println(list);
int index = list.indexOf("손흥민");
System.out.println(index);

// 결과
[차범근, 이영표, 박지성, 손흥민, 이강인]
3

 

10. toArray() : list클래스를 Object 배열로 반환해주는 메소드

// toArray() : list클래스를 Object 배열로 반환해주는 메소드
Object[] players = list.toArray();
for(Object ps : players) {
		System.out.print(ps + " ");
}

// 결과
차범근 이영표 박지성 손흥민 이강인

 

11. List에는 순서가 있기 때문에 "정렬"이 필요하다.

     리스트 정렬을 위한 메소드 : sort() -> static메소드 => Collections.sort(리스트)

     sort() 는 기본적으로 오름차순 정렬을 한다.

ArrayList numbers = new ArrayList();
for(int i = 0; i < 10; i++) {
		numbers.add((int)(Math.random() * 30));
}
System.out.println("=== 정렬 전 ===");
System.out.println(numbers);
System.out.println("=== 정렬 후 ===");
Collections.sort(numbers);
System.out.println(numbers);

// 결과
=== 정렬 전 ===
[16, 23, 2, 19, 20, 0, 2, 9, 28, 28]
=== 정렬 후 ===
[0, 2, 2, 9, 16, 19, 20, 23, 28, 28]

 

12. sort()를 이용해서 내림차순 정렬을 하려면?

     => compare()메소드를 오버라이드 하여 사용

public class NumberOrderDesc implements Comparator<Integer> {
	// 내림차순정렬
	@Override
	public int compare(Integer a, Integer b) {
//		return b - a; // 방법 1
		
		if(a > b) { // 방법 2
			return -1;
		} else if(a < b) {
			return +1;
		} else {
			return 0;
		}
	}
}


System.out.println("=== 정렬 전 ===");
System.out.println(numbers);
System.out.println("=== 정렬 후 ===");
Collections.sort(numbers, new NumberOrderDesc());
System.out.println(numbers);

// 결과
=== 정렬 전 ===
[0, 4, 5, 10, 10, 12, 12, 20, 20, 26]
=== 정렬 후 ===
[26, 20, 20, 12, 12, 10, 10, 5, 4, 0]

'Java' 카테고리의 다른 글

컬렉션(Collection) - Map  (0) 2021.10.20
컬렉션(Collection) - Set  (0) 2021.10.20
추상(Abstract)  (0) 2021.10.05
다형성(polymorphism)  (0) 2021.09.30
상속(Inherit)  (0) 2021.09.30