ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] List 중복 제거 (HashSet, TreeSet, Stream)
    Java/Collection(컬렉션) 2019. 12. 16. 13:50
    반응형

    목차

       

      List의 중복을 제거하는 방법

      List에 중복을 제거하기 위한 방법으로는 반복문을 통해 데이터를 확인하여 중복된 요소를 제거, 중복을 허용하지 않는 set 인터페이스를 사용하여 중복된 요소를 제거, 중복된 요소가 제거된 새로운 스트림을 반환하는 distinct() 메서드를 사용하는 방법 등이 있습니다.


      1. List의 데이터를 확인하여 중복을 제거

      public void getDistinctLogic() {
      	
      	List<String> originList = new ArrayList<String>();
      	originList.add("1");
      	originList.add("1");
      	originList.add("가나다");
      	originList.add("가나다");
      	originList.add("ABC");
      	originList.add("ABC");
      
      	List<String> resultList = new ArrayList<String>();
      
      	int originSize = originList.size();
      	for (int a = 0; a < originSize; a++) {
      
      		if (!resultList.contains(originList.get(a))) {
      
      			resultList.add(originList.get(a));
      		}
      	}
      	
      	System.out.println("getDistinctLogic : originList " + originList);
      	System.out.println("getDistinctLogic : resultList " + resultList);
      }


      2. HashSet, TreeSet을 사용하여 중복을 제거

      Set 인터페이스는 중복을 허용하지 않고, 순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용되는 인터페이스입니다.
      HashSet,  TreeSet는 Set 인터페이스를 구현하므로, 중복된 값은 저장하지 않고, 순서에 상관없이 저장합니다. 차이점은 TreeSet는 기본적으로 오름차순으로 데이터를 정렬합니다.


      2_1) HashSet을 사용하여 중복 제거

      public void getDistinctHashSet() {
      
      	List<String> originList = new ArrayList<String>();
      	originList.add("1");
      	originList.add("1");
      	originList.add("가나다");
      	originList.add("가나다");
      	originList.add("ABC");
      	originList.add("ABC");
      	
      	List<String> resultList = new ArrayList<String>();
      
      	HashSet<String> distinctData = new HashSet<String>(originList);
      	resultList = new ArrayList<String>(distinctData);
      	
      	System.out.println("getDistinctHashSet : originList " + originList);
      	System.out.println("getDistinctHashSet : resultList " + resultList);
      }

       

      2_2) TreeSet을 사용하여 중복 제거

      public void getDistinctTreeSet() {
      
      	List<String> originList = new ArrayList<String>();
      	originList.add("1");
      	originList.add("1");
      	originList.add("가나다");
      	originList.add("가나다");
      	originList.add("ABC");
      	originList.add("ABC");
      	
      	List<String> resultList = new ArrayList<String>();
      
      	TreeSet<String> distinctData = new TreeSet<String>(originList);
      	resultList = new ArrayList<String>(distinctData);
      
      	System.out.println("getDistinctTreeSet : originList " + originList);
      	System.out.println("getDistinctTreeSet : resultList " + resultList);
      }


      3. Stream의 distinct() 메서드를 사용하여 중복을 제거

      distinct() 메서드는 해당 스트림에서 중복된 요소가 제거된 새로운 스트림을 반환합니다.

      public void getDistinctStream() {
      
      	List<String> originList = new ArrayList<String>();
      	originList.add("1");
      	originList.add("1");
      	originList.add("가나다");
      	originList.add("가나다");
      	originList.add("ABC");
      	originList.add("ABC");
      
      	List<String> resultList = new ArrayList<String>();
      
      	resultList = originList.stream().distinct().collect(Collectors.toList());
      
      	System.out.println("getDistinctStream : originList " + originList);
      	System.out.println("getDistinctStream : resultList " + resultList);
      }

       

      반응형

      댓글

    Designed by Tistory.