2012-03-23 5 views
0

배열의 equals 함수는 인스턴스 만 검사하기 때문에 Set과 함께 작동하지 않습니다. 따라서 Java에서 배열 집합을 만드는 방법을 궁금합니다.자바에서 배열의 집합을 만드는 방법?

가능한 한 가지 방법은 각 배열을 객체에 넣을 수 있고 해당 클래스에 대해 equals 함수를 구현할 수 있지만 성능이 너무 떨어지게할까요?

+0

, 'hashCode'도 구현해야합니다. 트리를 기반으로 설정된 구현의 경우 일종의 순서를 구현해야합니다. –

+0

[Map이 키를 배열로 사용하는 방법]과 밀접한 관련이 있습니다. (http://stackoverflow.com/questions/16839182/can-a-java-array-be-used-as-a-hashmap-key) . 우수 사례는 – Raedwald

답변

-1

, 당신은 그것을 확장하고 equalshashCode 방법을 대체 할 수 있습니다. 다음은 샘플입니다 :

public MyArrayList extends ArrayList<MyClass> { 

    @Override 
    public boolean equals(Object o) { 
     if (o instanceof MyArrayList) { 
      //place your comparison logic here 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public int hashCode() { 
     //just a sample, you can place your own code 
     return super.hashCode(); 
    } 
} 

UPDATE :

심지어 단지에 코드를 변경, 일반적인 사용을 대체 할 수 있습니다 : 해시 테이블을 기반으로 한 세트의 구현을 위해

public MyArrayList<T> extends ArrayList<T> { 
    //overrides the methods you need 
    @Override 
    public boolean equals(Object o) { 
     if (o instanceof MyArrayList) { 
      //place your comparison logic here 
      return true; 
     } 
     return false; 
    } 
} 
2

배열이 필요한 일부 기존 API로 인해 절대적으로 필요하지 않는 한 원시 배열을 사용하지 마십시오.

항상 유형 안전 금고 ArrayList<T>을 사용해보십시오. 이러한 종류의 문제는 발생하지 않습니다.

+0

+1입니다. –

-2

Set를 확장하고 equals 메소드를 대체하는 클래스가이를 수행 할 수있는 클래스.

1

Set를 TreeSet의 인스턴스로 만들면 모든 비교 (동등성)에 사용될 사용자 지정 Comparator를 지정할 수 있습니다.

0

배열에 대한 래퍼 클래스를 만들고 그에 따라 해시 코드와 같음을 재정의 할 수 있습니다. 예를 들어 : ArrayList에 클래스가 이미 배열을 래핑 때문에

public class MyArrayContainer { 
int[] myArray = new int[100]; 
@Override 
public boolean equals(Object other) { 
    if (null!= other && other instanceof MyArrayContainer){ 
    MyArrayContainer o = (MyArrayContainer) other; 
    final int myLength = myArray.length; 
    if (o.myArray.length != myLength){ 
     return false; 
    } 
    for (int i = 0; i < myLength; i++){ 
     if (myArray[i] != o.myArray[i]){ 
       return false; 
     } 
    } 
    return true; 
    } 
    return false; 
} 

@Override 
public int hashCode() { 
    return myArray.length; 
} 
} 
관련 문제