리스트는 배열의 가장 큰 차이점은 배열은 크기를 10개로 정했다면 10개 이상의 값을 담을 수 없지만, 리스트는 크기가 정해져 있지 않아 원하는 만큼의 값을 담을 수 있다.
List의 자료형 중 가장 간단한 형태의 자료형
ArrayList<Integer> arrList = new ArrayList<>();
ArrayList<Integer> arrList2 = new ArrayList<>(5);
1. Array -> ArrayList
- int 가능
ArrayList<Integer> al = new ArrayList<>();
int [] arr = {0};
for(i = 0; i < arr.length(), i++){
al.add(arr[i]);
}
- Integer, String 가능
String [] arr = {"a", "b", "c"};
List<String> al = new ArrayList<>(Arrays.asList(arr));
-> String, Integer은 Reference라서 가능, int 는 primitive라서 불가능
--------------------------------------------------------------------------------------
2. add
al.add(3);
al.add(3, "Lee");
--------------------------------------------------------------------------------------
3. ArrayList 의 길이
al.size()
--------------------------------------------------------------------------------------
. Iterator
Iterator it = al.iterator();
while(it.hasNext()){
어쩌구저쩌구
}
arrList.remove(3);
arrList.remove(Integer.valueOf());
[출처][Java] 14일차 - Generic, List, Set, Map|작성자 윤슬
Set은 List와 다르게 객체(데이터)를 중복해서 저장할 수 없다. 또한 저장된 데이터를 인덱스로 관리하지 않기 때문에 저장 순서가 보장되지 않는다.
Set컬렉션을 구현하는 대표적인 클래스
[출처][Java] 14일차 - Generic, List, Set, Map|작성자 윤슬
Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가진다. Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(Key - Value)방식을 사용한다.
Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻는다.
Value는 중복을 허용 하지만 Key는 중복을 허용하지 않는다.
만약 Key가 중복되면, 나중에 들어간 Value로 값이 수정된다.
자바의 Map중 가장 간단한 형태의 맵
[출처][Java] 14일차 - Generic, List, Set, Map|작성자 윤슬
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("-------- array --------");
// 자료 구조 -> 배열
int[] arr = new int[3]; // 배열을 만들때 크기가 3으로 고정된다(정적배열)
arr[0] = 7;
arr[1] = 1;
arr[2] = 3;
for(int i : arr) {
System.out.println(i);
}
// arr[3] = 9; // ArrayIndexOutOfBoundsException 발생
// 배열 사용 X -> 배열대신 Collections(기본API) 사용 -> 3가지의 자료구조(list/set/map)
System.out.println("-------- list --------");
// 1) list(동적배열)
ArrayList<Integer> list = new ArrayList<Integer>(3);
// list.set(0, 7);
// list.set(1, 1);
// list.set(2, 3);
// list.set(3, 9); // 4개째 예외발생? -> IndexOutOfBoundsException 발생
list.add(7);
list.add(1);
list.add(3);
list.add(9); // 자동으로 list의 크기가 변경된다
System.out.println(list.get(3)); // 9
for(int i : list) {
System.out.println(i);
}
System.out.println("-------- set --------");
HashSet<Integer> set = new HashSet<Integer>();
set.add(3);
set.add(7);
set.add(3); // 중복된 값은 입력되지 않는다
// System.out.println(set.get(1)); // error -> index가 없다
System.out.println(set);
System.out.println("-------- map --------");
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("최도희",3);
map.put("최설",7);
map.put("최도희",10); // 동일한 키를 사용하면 덮어쓰기
System.out.println(map.get("최도희"));
System.out.println(map.get("최설"));
System.out.println("-------- 응용 list<map> --------");
ArrayList<HashMap<String, Object>> studentList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> s1 = new HashMap<String, Object>();
s1.put("이름", "최도희");
s1.put("나이", 21);
studentList.add(s1);
HashMap<String, Object> s2 = new HashMap<String, Object>();
s2.put("이름", "최설");
s2.put("나이", 22);
studentList.add(s2);
for(HashMap<String, Object> m : studentList) {
System.out.print((String)m.get("이름"));
System.out.print((Integer)m.get("나이"));
System.out.println("");
}
}
}
-------- array --------
7
1
3
-------- list --------
9
7
1
3
9
-------- set --------
[3, 7]
-------- map --------
10
7
-------- 응용 list --------
최도희21
최설22