
프로젝트 한창 할 때는 정말 웹을 위한 개발을 하느라... Collection을 제대로 사용하지 못했더니 혹시라도 잊었을까 봐 복기 겸 정리를 하려고 마음 먹음
ArrayList<Vo> list = new ArrayList<>();
<>
활용되는 기본 메서드 정리
// 1. add(E e) 리스트 끝에 추가
list.add(new Vo(1, 2));
// 2. add(int index, E, e) : 인덱스를 지정하여 해당 인덱스에 추가
list.add(1, new Vo(1, 2));
// 3. set(int index, E, e) : 해당 인덱스의 값을 변경
list.set(1, new Vo(3, 4));
// 4. size() : 리스트 안에 몇 개의 데이터가 있는지 (리스트 길이)
list.size();
// 5. remove(int index) : 해당 인덱스의 객체 삭제
list.remove(0);
// 6. get(int index) : 해당 인덱스로 객체 가져오기
list.get(0);
// 7. subList(int index1, int index2) : 추출해서 새로운 List로 반환
list.subList(0, 1);
// 8. addAll(Collection c) : 컬렉션을 통째로 뒤에 추가하는 메소드
list.addAll(sub);
// 9. isEmpty() : 컬렉션이 비어있는지 묻는 메소드
list.isEmpty(); // true or false
// 10. clear() : 전부 비우기
list.clear();
// 11. 오름차순 정렬
Collections.sort(list);
// 12. 내림차순 정렬
Collections.reverse(list);
// 13. clone() : 리스트 복제
list.clone();
배열과 List 상호 변환
String[] arr = {"a", "b", "c"};
// list 값의 추가나 변경 없이 사용할 경우
List<String> list1 = Arrays.asList(arr);
List<String> list2 = new ArraysList<>(Arrays.asList(arr));
// stream에서 지원
List<String> list3 = Stream.of(arr).collect(Collectors.toList);
list1처럼 배열을 변경하여 사용할 경우 add나 remove 같은 메소드를 사용하려면 Exception이 발생하기 때문에 list2와 같이 변경해서 사용해야 한다.
ArrayList<String> list = new ArrayList<String>();
int arrSize = list.size();
// String 배열일 경우
String[] arr1 = list.toArray(new String[arrSize]);
// int 배열일 경우
int[] arr2 = new int[arrSize];
for(int i=0; i<arrSize; i++) {
arr2[i] = Integer.parseInt(list.get(i));
}
int[] arr3 = list.stream().mapToInt(i -> i).toArray();
int[] arr4 = list.stream().mapToInt(Integer::intValue).toArray();
반복문으로 값을 넣는 방법이 보통 정석이 되는데, 나는 stream을 배우고 나서부터 stream으로 변경한 뒤 mapToInt 메소드를 통해 정수 배열에 넣어 주는 방법을 사용하고 있다. 반복문 사용하면 로직이 너무 길어진다...