List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
// 비어있는 리스트인가?
boolean result = list.isEmpty();
// 특정 요소를 포함하고 있는가?
if(list.contains(4)) {
System.out.println("4를 포함한다")
} else {
System.out.println("4를 포함하지 않는다")
}
ArrayList list = new ArrayList();
▶List list = new ArrayList():
■ 생성 >
List <String> list = new ArrayList<String>();
■ 요소추가 >
list.add("월");
list.add("화");
list.add(0,"일");
■ 요소제거 >
boolean result = list.remove("일");
System.out.println(result);
String removeItem = list.remove(0);
System.out.println(removeItem);
■ 요소수정 >
list.set(0,"일");
■ 리스트 확인 >
System.out.println(list);
■ 리스트 초기화 >
List<String> list = Arrays.asList("일","월","화","수")
■ 리스트 길이
int size = list.size();
System.out.println(size);
■ 개별 요소
String element1 = list.get(0);
String element2 = list.get(1);
String element3 = list.get(2);
String element4 = list.get(3);
System.out.println(element1);
System.out.println(element2);
System.out.println(element3);
System.out.println(element4);
■ for문 순회
size메소드 호출을 한 번만 진행한다.
String[] arr = {"일","월","화","수"};
for ( int i = 0; i < arr.length; i++ ) {
System.out.println(arr[i]);
}
for (int i = 0; i < list.size(); i++ ) {
System.out.println(list.get(i));
}
→ list의 사이즈 메소드를 여러번 호출하여 성능이 떨어짐
for(int i = 0, length = list.size(); i < length; i++) {
System.out.println(list.get(i));
}
→ list의 사이즈 메소드를 한번만 호출
for(String element : list) {
System.out.println(element);
}
set인터페이스의 대표 구현 클래스.
모든 데이터를 하나의 주머니에 넣어 관리하므로 입력 순서와 다르게 출력될 수 있다.
객체가 같은 내용을 지니더라도 가리키는 주소가 다르면 다른 값을 지닌다.
■ 세트 생성
Set<String> set = new HachSet<String>();
■ 요소 추가
set.add("일");
set.add("월");
set.add("화");
set.add("수");
set.add("수"); // 중복 저장 시도
■ 요소 제거
boolean result = set.remove("일");
System.out.println(result);
■ 세트 확인
System.out.println(set);
■ 세트의 초기화
Set<String> set = new HashSet<String>(Arrays.asList("일", "월", "화", "수"));
■ 세트의 길이
int size = set.size();
System.out.println(size);
■ 향상 for문 가능 ( 인덱스가 없으므로 일반 for문 불가능 )
for(String element : set) {
System.out.println(element);
}
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1,2,3,4,5));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3,4,5,6,7));
Set<Integer> set3 = new HashSet<Integer>(Arrays.asList(6,7));
■ 교집합
■ 합집합
■ 차집합
■ 부분집합 여부 판단
boolean result1 = set1.containAll(set3); // set3가 set1의 부분집합이면 true
boolean result2 = set2.containAll(set3); // set3가 set2의 부분집합이면 true
■ 중복 요소가 있는 리스트 → 세트 변환 → 다시 리스트로 변환
List<String> list = new ArrayList<String>();
list.add("일");
list.add("월");
list.add("화");
list.add("화");
Set<String> set = new HashSet<String>(list);
list.clear(); // list 요소 모두 제거
list = new ArrayList<String>(set);
키(Key)와 값(Value)으로 구성된 객체를 저장하는 구조를 가지고 있는 자료구조.
Key는 중복 저장 불가, Value는 중복 저장 가능
중복된 key값이 들어오면 기존의 값은 없어지고 새로운 값으로 대치된다.
map -> mapping
구조 : Map < Key, Value>
// Map 생성
// Map<Key, Value>
Map<String, String> dictionary = new HashMap<String, String<();
// 추가
// 새로운 key값을 사용하면 추가
dictionary.put("apple", "사과"); // put(Key, Value) 사과라는 value를 꺼내려면 apple이라는 key값이 필요
dictionary.put("banana", "바나나");
dictionary.put("tomato", "토마토");
dictionary.put("mango", "망고");
dictionary.put("melon", "멜론");
// 수정
// 기존의 Key 값을 사용하면 수정
dictionary.put("melon", "메론");
// 삭제
// 삭세할 요소의 key를 전달하면 삭제되고 삭제된 value 반환
String removeItem = dictionary.remove("tomato");
System.out.println(removeItem); // 토마토
// 값(Value)의 확인
System.out.println(dictionary.get("apple")); // 사과
System.out.println(dictionary.get("peach")); // null
// Value를 String으로 관리하기
Map<String, String> map1 = new HashMap<String, String>();
map1.put("title", "어린왕자");
map1.put("author", "생텍쥐베리");
map1.put("price", 10000 +"");
// Value를 String으로 관리하기
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("title", "홍길동전");
map2.put("author", "허균");
map2.put("price", 20000);
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "소나기");
map.put("author", "황순원");
map.put("price", 20000);
// Entry 단위로 순회 (for)
for(Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
// Key를 이용한 순회 (for)
for(String key : map.keySet()) {
System.out.println(key + " : " + map.get(key));
자바의 해시 (Hash)
해시(Hash)기반 컬렉션
Entry : key , value
for ( Entry entry : map, entrySet() )
entry.getKey()
entry.getValue()
map.getKey == value
for (String key : map.keySet())
map.get(key)
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(65, "제시카");
map.put(85, "에밀리");
map.put(35, "제임스");
map.put(95, "사만다");
System.out.println(map); // key를 기준으로 정렬되어 있음
// 결과
{35=제임스, 65=제시카, 85=에밀리, 95=사만다}
// 순회
for(Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
■ 기본 정렬 : 오름차순 정렬
TreeMap<Integer, String> map = new TreeMap<Integer, String> ();
map.put(65, "제시카");
map.put(85, "에밀리");
map.put(35, "제임스");
map.put(95, "사만다");
결과
■ 정렬 변경 : descendingMap() 메소드 호출
NavigableMap<Integer, String> map2 = map.descendingMap();
for ( Map.Entry<Integer,String> entry : map.entrySet() {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
// 다시 descendingMap() 메소드를 호출하면 오름차순 정렬이 된다.
NavigableMap<Integer, String> map3 = map.descendingMap();
for ( Integer Key : map.keySet()){
System.out.println(key + " : " + map3.get(key));
}
결과
Set<String>set = new HashSet<String>();
set.add("제육");
set.add("닭갈비");
set.add("돈까스");
set.add("김치찌개");
// set를 조회할 반복자 itr 생성
Iterator<String> itr = set.iterator();
// hasNext() : 남아있는 요소가 있으면
// next() : 그 요소를 꺼냄
while(itr.hasNext()) {
String element = itr.next();
System.out.println(element);
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("page", 1);
map.put("column", "제목");
map.put("query", "날씨");
Set<String> keys = map.keySet();
Iterator<String> itr = keys.iterator();
while(itr.hasNext()) {
String key = itr.next();
Object value = map.get(key);
System.out.println(key + " : " + value);
}
public static void printMovies(List<String> list) {
for (int i = 0, size= list.size(); i < size; i++) {
System.out.print(list.get(i));
if(i < (size - 1)) { // size-1 : 마지막 요소의 인덱스
System.out.print(" -> ");
}
}
System.out.println();
}
public static void main(String[] args) {
List<String> movies = new ArrayList<String>();
movies.add("아바타");
movies.add("쇼생크탈출");
movies.add("명량");
movies.add("에일리언");
movies.add("여인의향기");
printMovies(movies); // 아바타 -> 쇼생크탈출 -> 명량 -> 에일리언
// movies 리스트를 오름차순 정렬시킴
Collections.sort(movies);
printMovies(movies);
// movies 리스트를 내림차순 정렬시킴
Collections.reverse(movies);
printMovies(movies);
// 특정 요소의 인덱스 반환
// 이진 검색(binary search)을 이용하므로 검색 속도가 매우 빠름
// 단, 크기순으로 정렬이 되어 있어야 함
int idx = Collections.binarySearch(movies, "아바타");
System.out.println(idx);
}