기타/프로그래밍 분류

JAVA _ Collections클래스, 해시코드

zelkova 2013. 10. 16. 09:43

 <목차로 돌아가기>


Collections 클래스

컬렉션을 정렬하거나 검색하는 등의 메소드

 static <T> int

binarySearch(List<? extends Comparable<? super T>> List, T key)

지정된 list에서 Binary 검색 알고리즘을 사용하여 지정된 객체를 찾는다.

List는 자연스러운 순서(Natural ordering)로 미리 정렬되어 있어야 한다. 

static <T> int 

binarySearch(List < ? extends T> list, T key, Comparator<? super T> c

지정된 list에서 Binary  검색 알고리즘을 사용하여 지정된 객체를 찾는다. List는 지정된 Comparator로 미리 정렬되어 있어야 한다. 

static <T extends Comparable<? super T>> void 

sort<List<T> list)

지정된 list를 자연스러운 순서(natural ordering)로 정렬한다. 

static<T> void 

sort(List<T> list, Comparator<? super T> c)

지정된 list를 지정된 Comparator방식으로 정렬한다. 


예제

import java.util.ArrayList;

import java.util.Collections;


public class Test{

public static void main(String args[]){

ArrayList<String> list = new ArrayList<String>();

list.add("a");

list.add("c");

list.add("b");


System.out.println(list);

Collections.sort(list);

System.out.println(list);

int pos = Collections.binarySearch(list, "C");

System.out.println(pos);

}

}



해시코드(Hashcode)

1.프로그램이 시작되는 동안 같은 객체 상에서 hashCode()메소드가 여러 번 호출되어도 항상 같은 값을 반환해야 한다.

2. a.equals(b)가 true라면 a.hashCode() == b.hashCode()는 true가 되어야 한다.

3. a.hashCode() == b.hashCode()가 true라도 a.equals(b)는 true가 아닐 수도 있다.


hashCode()는 기본적으로 모든 객체마다 유일한 해시코드 값을 반환한다. 그래서 동일한 객체에 대해서 같은 객체로 간주하기 위해서는 hashcode()를 오버라이드해서 같은 해시코드를 반환할 수 있도록 해야한다.

또한 동일한 hashcode를 반환하더라도 우연찬게 객체가동일하지 않을 수도 있기 때문에 equals()를 오버라이드하여 객체가 정말 동일한지를 검증해야 한다.

equals()를 오버라이딩 하지 않았을 경우, 기본 동작은 객체의 주소를 비교하는 것이다.


hashCode()와 equals() 오버라이드

hashCode()만 오버라이드 했을 경우 실질적으로 객체는 같지 않은데 해시 코드만 같은 경우가 발생할 수 있다. 그래서 equals()도 반드시 오버라이드하여 객체의 값이 정말 동일한지 확인해야 한다.



반응형

'기타 > 프로그래밍 분류' 카테고리의 다른 글

JAVA - 스레드의 상태변이  (0) 2013.10.16
JAVA - 제네릭  (0) 2013.10.16
JAVA - Comparable,Comparator, Utilities, Arrays  (0) 2013.10.15
JAVA - 컬렉션_맵(MAP)  (0) 2013.10.15
JAVA - 컬렉션_큐(Queue)  (0) 2013.10.15