티스토리 뷰

Java/JAVA

List

Jenny_yoon 2023. 1. 5. 14:57
728x90
반응형
List 컬렉션

- List 컬렉션은 객체를 일렬로 늘어놓은 구조를 갖고있다.

- 객체를 인덱스로 관리하며 객체를 저장하면 자동으로 인덱스가 부여됨.

- List 컬렉션은 객체 자체르르 저장하는 것이x 객체의 번지를 참조하는 것!

- 동일한 객체 중복저장 가능 (동일한 번지가 참조되는 개념)

- null 도 저장 가능 (이 경우 해당 인덱스는 객체를 참조하지 않음)

 

 

 

List의 배열생성 법 
List<Integer> list = new ArrayList<Integer>();

주로 이렇게 배열을 생성한다. 하지만 아래 방식으로도 배열을 생성할 수도 있다. 

ArrayList<Integer> list = new ArrayList<Integer>();

List 와 ArrayList의 차이점이 뭘까?

List와 ArrayList는 부모자식 관계라고 할 수 있다. List 안에는 ArrayList, LinkedList 등이 있다. 

  • List로 생성한 1번째 방식은 ArrayList와 자식관계이므로 다형성을 통해 배열을 선언하였다.
    이런 경우 ArrayList, LinkedList 등 List 안에 속한 모든 기능을 다형성을 통해 사용 가능하다.

  • ArrayList로 생성한 2번째 방식은 ArrayList밖에 사용하지 못한다.

쉽게 도형에 비유하여 풀어보면, List는 도형이고 ArrayList는 정사각형, LinkedList는 직사각형이라고 할 수 있다.

 

 

 

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

public class AL01 {
	public static void main(String[] args) {
		// 1. 배열 생성 
		ArrayList<Integer> list = new ArrayList<Integer>(); 
       	 	//배열크기 추후 변경 가능 //< > : 제네릭
		//int[] arr = new int[10]; //이 형태는 배열크기 추후 변경 불가
		
		//2. 값 추가
		list.add(150);
		list.add(110);
		list.add(100);
		list.add(99);
		list.add(85);
		list.add(75);
		
       		//3. 값 출력
		System.out.println(list); //모든 배열값 
		
		//특정 인덱스 출력
		System.out.println(list.get(0)); //150
		
		//for문으로 출력 
		for(int i=0; i<list.size(); i++) {
			System.out.println(list.get(i)); //모든 배열값 
		}
		//foreach문으로 출력
		for(Integer integer : list) {
			System.out.println(integer); //모든 배열값 
		}
		//list의 마지막 데이터 출력
		System.out.println(list.get(list.size()-1)); //75
		
		//배열 길이 출력
		System.out.println(list.size()); //6
        
                //4. 값 초기화
                list.clear(); //초기화
		System.out.println(list.size()); //0

 

응용문제 1.

1~20중 짝수만 배열에 넣어서 출력해라.

ArrayList<Integer>list2 = new ArrayList<Integer>();

for(int i=1; i<21; i++) {
    if(i%2 == 0) {
        list2.add(i);
    }
}
System.out.println(list2);

 

응용문제 2.
1~20의 숫자를 배열에 넣고, 홀수 값을 제외한 값만 출력해라.
ArrayList<Integer>list3 = new ArrayList<Integer>();

for (int i = 1; i < 21; i++) {
        list3.add(i);
    }

    for(int j=19; j>0; j--) {
        if(j%2 == 0) {
            list3.remove(j);
        }
    }
    System.out.println(list3);
더보기

해설 : 

인덱스를 앞부터 삭제를 하면, 뒷 인덱스가 앞 인덱스 자리에 땡겨오게 된다. 즉, 인덱스들이 각자의 자리를 지키고 있는것이 아니라 계속 앞으로 땡겨지게 되는것. 그래서 맨 뒤부터 홀수를 찾아 삭제해야 한다!

 

 

list3.add(0,100); //0번째에 값 100을 넣음.
System.out.println(list3.get(0)); //100
System.out.println(list3.size()); //14
System.out.println(list3);

//값이 있는지 확인(true/false) 
list3.contains(20);
System.out.println(list3.contains(100));

//값이 비어있는지 확인(true/false)
list.isEmpty();
System.out.println(list.isEmpty());

//from~to~ 값을 옮기기
list3.subList(1, 2);
System.out.println(list3.subList(1, 2));

//배열값 섞기 
Collections.shuffle(list3);
System.out.println(list3);

//오름차순 정렬
Collections.sort(list3);
System.out.println(list3);

//내림차순 정렬
Collections.sort(list3,Collections.reverseOrder());
System.out.println(list3);

//해당 값 위치(인덱스번호) 찾기 (값이 없는경우, -1 반환)
list3.indexOf(10);
System.out.println(list3.indexOf(10)); //10

set()

List<Integer> list = new ArrayList<Integer>();

list.add(150);
int count = list.indexOf(150); 
System.out.println(count); //0

//변수.set(index, E); //index째 자리를 요소 E로 대체.
list.set(0,1); 
System.out.println(list); // [1]

Integer value = list.get(0); //래퍼클래스 
System.out.println(value);//1

Arrays.asList() : 고정된 객체들로 구성됨

- 더이상 객체 갯수, 객체 값 변동이 없을때 사용 (변경 불가! )

List<Integer> list10 = Arrays.asList(3,1,6,2);
System.out.println(list10); //[3, 1, 6, 2]
//System.out.println(list10.set(0,9)); //오류!
//System.out.println(list10.remove(0)); //오류!

<참조>

List list0 = new ArrayList(); 
//제네릭 없이 이렇게 배열 생성가능. 
//객체가 저장할때 Object로 변환되어 다양한 타입 변수 대입이 가능. 하지만 값을 찾아올 때 형변환을 해줘야해서 제네릭으로 해주는게 좋다.
//불필요한 형변환을 하지않도록 하기위해 제네릭이 도입된 것!
		
		list0.add(10);
		list0.add(11.1);
		list0.add("홍길동");
		list0.add(new Scanner(System.in));
		System.out.println(list0);
		
		int num0 = (int) list0.get(0); //형변환을 해줘야해서 제네릭으로 생성하는게 편하다.

 

응용문제 3(심화)
리스트를 만들고, 중복이 없는 랜덤숫자(1~45) 6개를 오름차순으로 배열에 저장해라. 랜덤은 6번만 실행 

아래 코드는 자꾸 중복숫자가 나오므로 추후 수정예정!

 List<Integer> rlist = new ArrayList<Integer>();
 
 	while (rlist.size() < 6) {
        int random = (int) (Math.random() * 45) + 1; // 랜덤숫자 생성
        if (rlist.indexOf(random) == 0) { // 랜덤숫자가 0번째에 있다면
            continue; // 아래문장 실행하지 않고 위로 올라감
        }
        if (rlist.size() == 0) { // 배열길이가 0인경우
            rlist.add(random); // 첫숫자라 저장하기
        } else if (rlist.indexOf(random) == -1) { // 배열에 랜덤숫자가 없는경우 (중복숫자 검열)
            for (int i = 0; i < rlist.size(); i++) { // 배열길이만큼 반복
                if (rlist.get(i).compareTo(random) == 1) { // i번째 값과 랜덤숫자 비교. 앞숫자가 크면 1반환.
                    rlist.add(i, random);
                    break;
                } else if (rlist.get(i).compareTo(random) == -1) {
                    for (int j = i + 1; j < rlist.size() - 1; j++) {
                        if (rlist.get(j) > random) {
                            rlist.add(j, random);
                            break;
                        }
                    }
                }
            }
        }
    }
    System.out.println(rlist);

 

728x90
반응형

'Java > JAVA' 카테고리의 다른 글

Iterator (반복자)  (0) 2023.01.06
compareTo() & indexOf()  (0) 2023.01.06
wrapper (래퍼클래스)  (0) 2023.01.05
is a, has a  (0) 2023.01.05
메모리 - 호출스택, 힙, 메소드  (0) 2023.01.05
댓글
250x250
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday