java collection ArrayList

canyi·2023년 6월 23일
0

java m1

목록 보기
25/40

ArrayList

  • 내부적으로 배열을 이용하여 저장
  • 인덱스를이용해배열요소에빠르게접근가능
  • List 인터페이스를 구현하므로 순서가 유지되고 중복이 허용 됨
  • 크기를늘리기위해서새로운배열을생성하고기존의요소를옮기는복잡한과 정을 거침.

ArrayList의 장점과 단점

장점

  • 인덱스번호를알고있으면조회시간이짧다

단점

  • 크기를 변경하기 어렵다
  • 크기변경시새로운배열을생성후복사하여다시값을옮겨야됨
  • 데이터의 추가, 삭제에 시간이 오래 걸린다

코드예시

ArrayList

  • 데이터의 저장순서 유지
  • 중복 허용

list1의 1번 원소부터 3번 원소까지 저장


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

public class ex_ArrayList {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();

        // 리스트에 값 저장
        list1.add(new Integer(5));
        list1.add(4);
        list1.add(2);
        list1.add(0);
        list1.add(1);
        list1.add(3);

        System.out.println(list1);

        // list1의 1번 원소부터 3번 원소까지 저장
        List<Integer> list2 = new ArrayList<>(list1.subList(1,4));
        System.out.println(list2);
    }
}

list1, list2 정렬 (static void print 사용)

package ch11_컬렉션_프레임워크2;

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

public class ex_ArrayList {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();

        // 리스트에 값 저장
        list1.add(new Integer(5));
        list1.add(4);
        list1.add(2);
        list1.add(0);
        list1.add(1);
        list1.add(3);

        System.out.println(list1);

        // list1의 1번 원소부터 3번 원소까지 저장
        List<Integer> list2 = new ArrayList<>(list1.subList(1,4));
        System.out.println(list2);

        Collections.sort(list1);	// list1과 list2를 정렬한다.
        Collections.sort(list2);	// Collections.sort(List l)
        print(list1, list2);


    }

        static void print(List list1, List list2){
            System.out.println("list1:"+list1);
            System.out.println("list2:"+list2);
        }
}
static void print(List list1, List list2){
            System.out.println("list1:"+list1);
            System.out.println("list2:"+list2);
        }

static void print 사용한 이유는 List라는 인터페이스를 만들어 불필요한 노가다를 줄이고 코드의 재사용성을 높이기 위해서이다.

list1은 list2의 모든 원소를 포함하고 있는지 확인

System.out.println("list1.containsAll(list2):" + list1.containsAll(list2));

전체코드

package ch11_컬렉션_프레임워크2;

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

public class ex_ArrayList {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();

        // 리스트에 값 저장
        list1.add(new Integer(5));
        list1.add(4);
        list1.add(2);
        list1.add(0);
        list1.add(1);
        list1.add(3);

        System.out.println(list1);

        // list1의 1번 원소부터 3번 원소까지 저장
        List<Integer> list2 = new ArrayList<>(list1.subList(1,4));
//        System.out.println(list2);

        // list1은 list2의 모든 원소를 포함하고 있는가?
		System.out.println("list1.containsAll(list2):" + list1.containsAll(list2));

    }

        static void print(List list1, List list2){
            System.out.println("list1:"+list1);
            System.out.println("list2:"+list2);
        }
}

list1에서 list2에 포함된 객체들을 삭제

인덱스를 뒤에서부터 돌려야 삭제에 영향을 받지 않음

list1에서 list2에 포함된 객체들을 삭제한다.
인덱스를 뒤에서부터 돌려야 삭제에 영향을 받지 않음

        for (int i = list1.size() - 1; i >= 0; i--) {
            if (list2.contains(list1.get(i)))
                list1.remove(i);
        }

전체코드

package ch11_컬렉션_프레임워크2;

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

public class ex_ArrayList {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();

        // 리스트에 값 저장
        list1.add(new Integer(5));
        list1.add(4);
        list1.add(2);
        list1.add(0);
        list1.add(1);
        list1.add(3);

        System.out.println(list1);

        // list1의 1번 원소부터 3번 원소까지 저장
        List<Integer> list2 = new ArrayList<>(list1.subList(1, 4));

        Collections.sort(list1);	// list1과 list2를 정렬한다.
        Collections.sort(list2);	// Collections.sort(List l)

//  list1에서 list2에 포함된 객체들을 삭제한다.
//		인덱스를 뒤에서부터 돌려야 삭제에 영향을 받지 않음
        for (int i = list1.size() - 1; i >= 0; i--) {
            if (list2.contains(list1.get(i)))
                list1.remove(i);
        }

        print(list1, list2);
    }
        static void print(List list1, List list2){
            System.out.println("list1:"+list1);
            System.out.println("list2:"+list2);
        }
}

profile
백엔드 개발 정리

0개의 댓글