⚙️ Backend/JAVA

자바 - 컬렉션 프레임워크 - List 계열

코너(Corner) 2020. 12. 7.
반응형

1. 자료를 저장하는 데 발생하는 문제점 

: 자료를 저장할 때 흔히 배열을 사용하지만 추가, 삭제할 때 중간에 비어지는 것이 발생할 수 있으므로 여러가지 문제점이 생긴다.

 

2. 문제점을 해결하기 위해서 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 넣어 두었다.

이를 총칭해서 컬렉션 프레임워크라고 한다.

 

3. 컬렉션이란? : 사전적인 의미로 요소를 수집해서 저장하는 것.

자바 컬렉션이란 ? : 객체를 수집해서 저장하는 역할을 하는 것.

프레임워크란 ? : 사용 방법을 미리 정해 놓은 라이브러리

 

4. 자바 컬렉션 프레임워크 

5. List 컬렉션 

1) 특징 

- List 컬렉션은 객체를 일렬로 늘어 놓은 구조를 가진다.

- 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다.

- List 컬렉션은 객체자체를 저장하는 것이 아니라 객체의 번지를 참조한다.

- 동일한 객체를 중복 저장할 수 있는데 이 경우 동일한 번지가 참조된다.

- null도 저장이 가능한데 이 경우 해당 인덱스는 객체를 참조하지 않는다.

 

2) List 컬렉션에는 ArrayList, Vector, LinkedList등이 있다.

 

3) 공동으로 사용되는 메소드들 

 

4) 기본 명령어

  List<String> list =  ~;

   list.add = "홍길동"; // 맨끝에 객체 추가

   list.add(1, "정현희"); // 저장된 인덱스에 객체 생성

   String str = list.get(i); //인덱스로 객체 찾기

   list.remove(0) ;//인덱스로 객체 삭제

   list.remove("정현희") ;//객체 삭제

 

5) 전체 객체를 대상으로 하나씩 반복해서 저장된 객체를 얻고 싶다면

List<String> list = ~;

for (int i = 0; i < list.size(); i++ ){ // 저장된 총 객체 수 만큼 루핑

  String str = list.get(i); // 인덱스에 저장된 String 객체를 가져옴

}

또는 

인덱스 번호가 필요 없다면 향상 for문을 이용하기 

for (String str : list ) {

// 저장된 총 객체 수만큼 루핑

}

 


6. ArrayList

1) 개요

ArrayList는 List 인터페이스의 구현 클래스이다.

 

2) 배열과 ArrayList의 다른점

공통점 : 인덱스로 객체를 관리한다는 점

차이점 : 배열 - 생성할 때 크기가 고정되고 사용 중에 크기를 변경할 수 없다.

ArrayList - 초과한 객체들이 들어오면 자동적으로 저장용량이 늘어난다.

 

3) ArrayList 생성하기

 List<String> list = new ArrayList<String>(); //기본생성자로는 10개의 객체를 저장할 수 있는 초기 용량

   List<String> list = new ArrayList<String>(30); //String객체 30개를 저장할 수 있는 용령을 가짐

   

   list.add("홍길동");//컬렉션에 객체를 추가

   String name= list.get(0); //컬렉션에서 객체 검색, 홍길동을 바로 읽음

 

4) 빈번한 객체의 삭제와 삽입이 일어나는 곳에는 적합하지 않다.

특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다.

특정 인덱스에 객체를 삽입하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 밀려난다.

 


import java.util.*;

​

public class ArrayListExample {

public static void main(String[] args) {

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

​

list.add("Java");

list.add("JDBC");

list.add("Servlet/JSP");

list.add(2, "Database");

list.add("iBATIS");

​

int size = list.size();

System.out.println("총 객체수: " + size); 

System.out.println();

​

String skill = list.get(2);

System.out.println("2: " + skill);

System.out.println();

​

for(int i=0; i<list.size(); i++) {

String str = list.get(i);

System.out.println(i + ":" + str);

}

System.out.println();

​

list.remove(2);

list.remove(2);

list.remove("iBATIS"); 

​

for(int i=0; i<list.size(); i++) {

String str = list.get(i);

System.out.println(i + ":" + str);

}

}

}

 

예제2 

6)  예제2) Arrays.asList()메소드를 활용해서 ArrayList 만들기

​

이용분야 : 고정된 객체들로 구성된 List를 생성할 때

​

List<T> list = Arrays.asList(T..a);

​

------------------------------------

import java.util.Arrays;

import java.util.List;

​

public class ArraysAsListExample {

public static void main(String[] args) {

List<String> list1 = Arrays.asList("홍길동", "신용권", "감자바");

for(String name: list1) {

System.out.println(name);

}

​

List<Integer> list2 = Arrays.asList(1, 2, 3);

for(int value : list2) {

System.out.println(value);

}

}

}

 

예제3 

예제3) 

import java.util.*;

​

class ArrayListEx1{

public static void main(String[] args) {

ArrayList list1 = new ArrayList(10);

list1.add(new Integer(5));

list1.add(new Integer(4));

list1.add(new Integer(2));

list1.add(new Integer(0));

list1.add(new Integer(1));

list1.add(new Integer(3));

​

ArrayList list2 = new ArrayList(list1.subList(1,4)); 

print(list1, list2);

​

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

Collections.sort(list2); // Collections.sort(List l)

print(list1, list2);

​

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

​

list2.add("B");

list2.add("C");

list2.add(3, "A");

print(list1, list2);

​

list2.set(3, "AA");

print(list1, list2);

​

// list1에서 list2와 겹치는 부분만 남기고 나머지는 삭제한다.

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

print(list1, list2);

​

// list2에서 list1에 포함된 객체들을 삭제한다.

for(int i= list2.size()-1; i >= 0; i--) {

if(list1.contains(list2.get(i)))

list2.remove(i);

}

print(list1, list2);

} // main의 끝

​

static void print(ArrayList list1, ArrayList list2) {

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

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

System.out.println();

}

} // class 

 

예제4 

예제4) import java.util.*; 

​

class ArrayListEx2 { 

public static void main(String[] args) { 

final int LIMIT = 10; // 자르고자 하는 글자의 개수를 지정한다.

String source = "0123456789abcdefghijABCDEFGHIJ!@#$%^&*()ZZZ"; 

int length = source.length(); 

​

List list = new ArrayList(length/LIMIT + 10); // 크기를 약간 여유 있게 잡는다.

​

for(int i=0; i < length; i+=LIMIT) { 

if(i+LIMIT < length ) 

list.add(source.substring(i, i+LIMIT)); 

else 

list.add(source.substring(i)); 

} 

​

for(int i=0; i < list.size(); i++) { 

System.out.println(list.get(i));

} 

} // main()

} 

​

 


메소드 기능들

더보기

[ add() ]

순서대로 리스트를 추가

배열 사이즈 초과 시 초기 설정된 사이즈만큼 자동으로 사이즈가 증가함

인덱스를 추가로 지정해주면 해당 인덱스에 값을 삽입

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("대전");

list.add("대구");

list.add("부산");

list.add(1, "LA"); // 1번 인덱스에 값 삽입

System.out.println(list); // [서울, LA, 대전, 대구, 부산]

}

}

 

[ get() ]

인덱스를 제공하면 해당 값을 반환

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

System.out.println(list.get(0)); // "서울"

}

}

 

 

[ set() ]

인덱스, 바꿀 값을 제공하면 해당 인덱스의 값을 바꿔줌

import java.util.ArrayList;

public class Test {

public static void main(String[] args) {

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

list.add("사과");

list.add("배");

list.add("포도");

list.set(0, "감");

System.out.println(list); // [감, 배, 포도]

}

}

 

 

[ indexOf() / lastIndexOf() ]

값을 제공하면 해당 값의 인덱스를 반환

indexOf()는 0부터 순서대로 검색해서 첫 번 째 값의 인덱스를 반환

lastIndexOf()는 반대 순서로 검색

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

System.out.println(list.indexOf("LA")); // 1

System.out.println(list.lastIndexOf("LA")); // 3

}

}

 

[ remove() ]

인덱스 제공 시 해당 인덱스의 값 삭제

값 제공 시 첫번 째 검색 값 삭제

 

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

list.remove(0); // "서울" 삭제

list.remove("LA"); // "LA" 삭제

System.out.println(list); // [대전, LA, 부산]

}

}

 

[ contains () ]

값을 제공하면 해당 값이 배열에 있는지 검색해서 true / false 반환

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

System.out.println(list.contains("LA")); // true

System.out.println(list.contains("제주도")); // false

}

}

 

 

[ toArray() ]

ArrayList 타입의 인스턴스를 일반 배열 타입으로 반환

저장할 배열 타입에 맞춰 자동 형변환

배열 크기 또한 자동으로 맞춰서 바꿔줌

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

String[] arr = list.toArray(new String[list.size()]);

for (String num : arr)

System.out.print(num + " "); // 서울 LA 대전 LA 부산

}

}

 

[ clear() / isEmpty() ]

clear() : 배열의 값 모두 삭제

isEmpty() : 배열이 비었으면 true, 하나라도 값이 있으면 false 반환

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

list.clear();

System.out.println(list.isEmpty()); // clear 했으므로 true

}

}

 

[ addAll() ]

두 컬렉션을 합침

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

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

list2.add("김치");

list2.add("멸치");

list2.add("국수");

list2.add("비빔면");

list.addAll(list2); // 두 컬렉션 합치기

System.out.println(list);

// [서울, LA, 대전, LA, 부산, 김치, 멸치, 국수, 비빔면]

}

}

 

[ containsAll() ]

argument로 제공한 컬렉션의 모든 값이 포함되어 있는지 여부를 true / false로 반환

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

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

list2.add("김치");

list2.add("멸치");

list2.add("국수");

list2.add("비빔면");

System.out.println(list.containsAll(list2)); // 합치기 전 false

list.addAll(list2); // 두 컬렉션 합치기

System.out.println(list.containsAll(list2)); // 합친 후 true

}

}

 

[ retainAll() ]

argument로 제공한 컬렉션 내에 들어있는 값을 제외하고 모두 지워줌

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

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

list2.add("LA");

list2.add("대전");

list.retainAll(list2); // LA, 대전 빼고 모두 삭제

System.out.println(list); // [LA, 대전, LA]

}

}

 

[ removeAll() ]

argument로 제공한 컬렉션 내에 들어있는 값과 일치하는 값을 모두 지워줌

retainAll() 메소드와 반대

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

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

list2.add("LA");

list2.add("대전");

list.removeAll(list2); // list2에 포함된 값 모두 삭제

System.out.println(list); // [서울, 부산]

}

}

 

[ size() ]

현재 저장돼 있는 값의 갯수 반환

import java.util.ArrayList;

public class Main {

public static void main(String[] args) {

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

list.add("서울");

list.add("LA");

list.add("대전");

list.add("LA");

list.add("부산");

System.out.println(list.size()); // 5

}

}

 


 


 

반응형

'⚙️ Backend > JAVA' 카테고리의 다른 글

JAVA 자바 - 컬렉션 : Set  (0) 2020.12.09
JAVA 자바 - 컬렉션 : Vector  (0) 2020.12.08
Java.time Package  (0) 2020.12.03
JAVA - Clone에 관하여..  (0) 2020.11.30
JAVA(자바) - 인스턴스 변수와 클래스 멤버 변수  (0) 2020.11.13

댓글