>Java >java지도 시간 >Java 배열에서 중복 데이터를 제거하는 구현 방법에 대한 자세한 설명

Java 배열에서 중복 데이터를 제거하는 구현 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-08 11:15:462292검색

이 글은 주로 Java에서 배열의 중복 데이터를 제거하는 방법을 소개하며, 배열에서 중복을 제거하기 위한 몇 가지 일반적인 방법, 구현 원리 및 관련 주의 사항을 예제 형식으로 자세히 분석합니다.

The 이 문서의 예제에서는 Java가 배열에서 중복 데이터를 제거하는 방법을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

얼마 전 인터뷰에서 질문을 받았습니다. 배열에 중복된 요소가 있는 경우 중복된 요소를 제거하려면 어떤 방법을 사용할 수 있습니까? 한동안 한 가지 방법을 사용하려고 생각했지만 나중에 정보를 확인한 결과 이를 달성할 수 있는 방법이 여러 가지 있다는 것을 알게 되었습니다. 이제 몇 가지 간단한 방법을 요약하겠습니다.

1. List 컬렉션을 사용하여


int[] str = {5, 6, 6, 6, 8, 8, 7,4};
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i<str.length; i++) {
  if(!list.contains(str[i])) {
    list.add(str[i]);
  }
}
System.out.println("去除重复后的list集合"+list);

구현


2. hashSet 또는 TreeSet을 사용하여

去除重复后的list集合[5, 6, 8, 7, 4]
출력 결과:


Integer[] nums = { 5, 5, 6, 6, 6, 8, 8, 7, 11, 12, 12 };
// HashSet hset = new HashSet(Arrays.asList(nums));
TreeSet<Integer> hset = new TreeSet<Integer>(Arrays.asList(nums));
Iterator i = hset.iterator();
while(i.hasNext()){
  System.out.println(i.next());
}

중복된 데이터가 제거되었을 뿐만 아니라, 데이터도 정렬된 것을 확인할 수 있습니다.

그 중
은 배열을 List 객체로 변환하는 것입니다. 이 메소드는 ArrayList 유형의 객체를 반환합니다. 이 ArrayList 클래스는 java.util.ArrayList 클래스가 아니라 Arrays 클래스의 정적 내부 클래스입니다!

TreeSet은 요소가 반복되는 것을 방지할 수 있을 뿐만 아니라 정렬과 같은 기능을 사용하여 컬렉션을 구현할 수도 있습니다. 개체 요소가 집합에 추가되면 특정 비교 규칙에 따라 순서가 지정된 개체 시퀀스에 자동으로 삽입됩니다.

Arrays.asList()

3. List를 사용하여

5 6 7 8 11 12
을 구현하도록 설정합니다. 출력 결과:


int[] nums = { 5, 6, 6, 6, 8, 8, 7 };
List<Integer> numList = new ArrayList<Integer>();
for (int i : nums)
  numList.add(i);
Set<Integer> numSet = new HashSet<Integer>();
numSet.addAll(numList);
System.out.println(numSet);

중복된 데이터도 제거되고 정렬이 구현되는 것을 볼 수 있습니다.


HashSet과 TreeSet을 비교해 보겠습니다.

HashSet

HashSet의 특징은 다음과 같습니다1) 요소의 순서는 보장할 수 없으며 순서는 변경될 수 있습니다2) 동기화되지 않습니다

3) 컬렉션 요소는 null일 수 있지만 null은 하나만 넣을 수 있습니다.

HashSet 컬렉션에 요소가 저장되면 HashSet은 개체의 hashCode() 메서드를 호출하여 hashCode 값을 가져옵니다. hashCode 값은 HashSet에서 객체의 저장 위치를 ​​결정합니다.


간단히 말하면, HashSet 집합에 있는 두 요소의 동등성을 판단하는 기준은 두 객체가 equals 메소드를 통해 동일하며, 두 객체의 hashCode() 메소드의 반환 값이 동일한 것입니다.

객체를 HashSet에 넣으려면 해당 객체 클래스의 equals 메서드를 재정의하고 해당 hashCode() 메서드도 재정의하세요. 규칙은 두 객체가 equals 메서드 비교를 통해 true를 반환하면 해당 hashCode도 동일해야 한다는 것입니다. 또한 hashCode의 값을 계산하려면 객체에서 같음으로 사용되는 표준 속성을 사용해야 합니다.

TreeSet 클래스

TreeSet은 SortedSet 인터페이스의 유일한 구현 클래스입니다. TreeSet은 컬렉션 요소가 정렬된 상태인지 확인할 수 있습니다. TreeSet은 자연 정렬과 사용자 정의 정렬이라는 두 가지 정렬 방법을 지원하며, 이 중 자연 정렬이 기본 정렬 방법입니다. TreeSet에 추가되는 것은 동일한 클래스의 객체여야 합니다. TreeSet이 두 개체가 동일하지 않다고 판단하는 방법은 두 개체가 equals 메서드를 통해 false를 반환하거나 CompareTo 메서드를 통한 비교에서 0을 반환하지 않는 것입니다.

자연 정렬

자연 정렬은 CompareTo(객체 obj) 정렬할 요소의 방법 요소 간의 크기 관계를 비교한 다음 요소를 오름차순으로 정렬합니다.

Java는 정수 값을 반환하는 CompareTo(Object obj) 메서드를 정의하는 Comparable 인터페이스를 제공합니다. 이 인터페이스를 구현하는 개체는 크기를 비교할 수 있습니다.

obj1.compareTo(obj2) 메서드가 0을 반환하면 비교 중인 두 개체가 동일하다는 의미입니다. 양수를 반환하면 obj1이 음수이면 의미합니다. obj1은 obj2보다 작습니다.

두 개체의 equals 메서드에 대해 항상 true를 반환하는 경우 두 개체의 CompareTo 메서드 반환은 0을 반환해야 합니다.

사용자 정의 정렬

자연스러운 정렬은 컬렉션 요소의 크기를 기반으로 합니다. 오름차순으로 정렬을 사용자 정의하려면 Comparator 인터페이스를 사용하고 int Compare(T o1,T o2) 메서드를 구현해야 합니다.

가장 중요한 점:

1. TreeSet은 2차차 트리로 구현됩니다. Treeset의 데이터는 자동으로 정렬되며 null 값은 허용되지 않습니다.

2. HashSet의 데이터는 순서가 지정되지 않습니다. Null을 넣을 수 있지만 두 값 모두에 있는 값은 반복될 수 없습니다. 데이터 베이스.

3. HashSet은 입력된 객체가 HashCode() 메소드를 구현해야 합니다. 동일한 내용을 가진 문자열 객체는 동일한 해시코드를 가지므로 입력된 객체는 반복될 수 없습니다. 그러나 동일한 클래스의 개체를 다른 인스턴스에 넣을 수 있습니다.

위 내용은 Java 배열에서 중복 데이터를 제거하는 구현 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.