IT이야기/JAVA

[JAVA Arraylist,Linkedlist 객체 중복제거] Custom List객체를 hashset으로 중복제거 하는 방법

FelixShin 2016. 3. 1. 13:59
반응형



자바 Custom object를 중복제거 하는 법에 대해서는 찾기가 어려워서 블로그를 작성한다.

일반적으로 string이나 int값은 list나 array에 넣어서 hashset에 넣었다가 list나 array로 바로 빼면 쉽게 중복 제거가 가능하다



자바객체가 들어있는 Arraylist나 linkedlist를 제거하는 방법 중 빠르고 간편한 방법 하나는 Hashset이다..!!


2가지만 알면 위의 과정을 쉽게 처리할 수 있다.





첫번째 과정은 hashset을 이용하는 것이다.

가정 : custom객체는 FileVO로 가정(FileVO는 파일ID, 파일명, 확장자, MD5, 사이즈 등 파일의 여러 속성을 가진 객체)

가정 : 아래에 쓰인 test1과 test2는 FileVO 커스텀 객체로 만들어 가상 데이터가 들어있다.(list에 커스텀 객체를 넣다고 보면 된다)


아래는  ArrayList로 받아서 hashset을 이용하여 중복제거를 하는 과정이다.



소스 코드 :


ArrayList<FileVO> List = new ArrayList<FileVO>();

List.add(test1);

List.add(test2);

HashSet<FileVO> listSet = new HashSet<FileVO>(list);


Arraylist<FileVO> processedList = new Arraylist<FileVO>( listSet);



두번째 과정은 FileVO객체 쪽에 아래와 같은 정의가 필요하다.

가정 : FileVO 중복제거를 할 때, fileID와 MD5값을 고유값으로 가짐


위와 같은 가정을 바탕으로 FileVO 클래스에 아래와 같은 메쏘드를 추가하면 사용자가 만든 커스텀 객체도 중복제거가 가능하다.


@Override
public int hashCode(){
return (this.fileId.hashCode() + this.MD5.hashCode());
}

@Override
public boolean equals(Object obj){
if(obj instanceof FileVO){
FileVO temp = (FileVO) obj
;
if(this.fileId.equals(temp.fileId) && this.MD5.equals(temp.getMD5())){
return true;
}
}
return false;
}


출처 : 

http://stackoverflow.com/questions/11607378/remove-duplicate-object-in-java