List를 정렬할 때는 Collection.sort()
배열을 정렬할 때는 Arrays.sort()
HashSet<데이터타입> 변수명 = new HashSet<데이터타입>();
Set 인터페이스에서 지원하는 구현 클래스
순서 X, 일정하게 유지 X
중복 허용 X
Iterator
를 사용contains(value)
: 값이 존재한다면 true, 값이 없다면 falsestream은 데이터의 흐름. 배열이나 컬렉션에 함수 여러 개를 조합해서 결과 얻을 수 있음!
-사용법 예시
List<MemberDto> collect = new ArrayList<MemberDto>();
for(Member member : findMembers){
collect.add(new MemberDto(member.getName()));
}
랑
List<MemberDto> collect = findMembers.stream()
.map(m -> new MemberDto(m.getName()))
.collect(Collectors.toList());
랑 같음!
int[] numbers = {10,20,30,40,50};
이런 배열은 갯수가 정해져 있고, 추가 삭제가 어렵고 직접 구현해야 한다.
그래서 우린!
ArrayList / LinkedList 를 사용함.
(크기를 동적으로 늘릴 수 있다!)
ArrayList: 내부 배열에 객체를 저장해서 인덱스로 관리
장점: 인덱스를 이용해서 데이터를 가져오는 것 유용
단점: 데이터의 추가와 삭제가 느리다.
(데이터를 리스트의 처음이나 중간에 저장하면, 이후의 데이터들이 한칸씩 뒤로 물러나야한다.)
LinkedList: List 구현 클래스
인접 참조를 링크해서 체인처럼 관리
제거되는 인덱스의 앞 뒤 링크만 변경되고 나머지 링크는 변경되지 않음
-> 데이터의 추가/삭제가 빈번하다면 유리!
Arrays 클래스의 정적 메서드 asList()
고정된 객체들로 구성된 List를 생성하는 방법
List<String> list = Arrays.asList("hello", "gglee", "java");
ArrayList와 동일한 내부 구조(저장할 타입을 지정해야 함)
차이점은 Vector 클래스는 동기화된(synchronized) 메서드로 구성!
그래서 멀티 스레드 환경에서 안전하게 객체 추가, 삭제 가능 -> 스레드에 안전
그러나, 동기화 때문에 속도는 느림. (안전성 추구, 속도 포기)
// String 객체를 관리하는 Vector 객체 생성
List<String> list = new Vector<>();
// 객체 추가
list.add("hello");
// 객체 제거
list.remove(0);