자바 - 컬렉션 프레임워크 - List 계열
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 |
댓글