2016-12-26 9 views
0

にここにセットまたはリストを使用して、私は私がテーブルから組織の種類をリストする必要があるシナリオを、持っている:私はJavaへの初心者ですコード

要件:ちょうど追加なし、リストまたは要素を削除し、

私はセットとリストの違いを理解したよう:

設定

セットオブジェクトのユニークなコレクションです。 SetはオブジェクトのUn-orderedコレクションです。

一覧:

リストは、オブジェクトの非ユニークなコレクションです。 リストはオブジェクトの順序付きコレクションです。私のテーブルで

私のような列を持っています:これは私のEntityDetailクラスです

id name  is_active 
1 Lab  1 
2 Pharmacy 2 
3 Hospital 3 

最大10行

**Controller**: 

List<OrgType> orgTypeList = organizationService.getAllOrgTypes(true); 
OrgTypeResponse response = new OrgTypeResponse(); 
List<EntityDetail> orgTypeDetailList = new ArrayList<>(); 
EntityDetail orgTypeDetail; 
for(OrgType orgType : orgTypeList) { 
    orgTypeDetail = new EntityDetail(); 
    orgTypeDetail.setId(orgType.getId()); 
    orgTypeDetail.setName(orgType.getName()); 
    orgTypeDetailList.add(orgTypeDetail); 
} 
response.setStatus(ResponseStatusCode.SUCCESS); 
response.setTotalOrgTypes((long)orgTypeDetailList.size()); 
response.setOrgTypes(orgTypeDetailList); 
return response; 


**Service** Implementaion: 
List<OrgType> orgTypeList = orgTypeRepository.findByActive(active); 
return orgTypeList; 

:こちらを

public class EntityDetail { 

    private Long id; 
    private String name; 

    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

私の質問ですが、私はできますリストの代わりにセットを使用する

設定が使用されている場合、私はID

のASC順に表示またはそれが

あるとして、コードを残す必要があるため、私はちょうど明確化をしたい、TreeSetのを使用することができ、

感謝

+0

あなたがセットを使用するか、それが要件に依存して一覧表示することができます。差分リストのみがsetを使って作成された重複は削除されます.HashSetは同じ数の要素に対してArrayListより約5.5倍多くのメモリを消費します(ただし、両方ともまだ線形です)。 一意性またはcontainsのパフォーマンスを気にしない場合は、ArrayList –

答えて

2

ここに私の質問は、私は問題なく

はい、代わりにリストのセットを使用することができ、ちょうどimpleですequalsおよびhashCode

セットが使用されている場合、私はクラスEntityDetailがインタフェースComparable<EntityDetail>を実装した場合のことができますID

のASC順に表示する必要があるので、私は、TreeSetのを使用することができます。 TreeSetは、様々なEntityDetailオブジェクトの自然順序が何であるか知っていなければならないので、これは必要です。詳細については

Oracle docs on object orderingJavadoc for Comparable

+0

を使用します。「クラスEntityDetailがComparable インターフェイスを実装している場合は可能です。 'TreeSet'は引数として' Comparator'を持つ多重定義されたコンストラクタを持っているので、必ずしもそうではありません。 – davidxxx

+1

@davidxxxありがとう、素敵なキャッチ!私は通常、クラスが( '' 'Comparable'''を実装することによって)要素の順序付けをサポートしていると明示的に好むので、そのオーバーロードされたコンストラクタを忘れてしまいました。 –

0

はいuはSETが重複したエントリが排除されていることを確認しますので、代わりにこのシナリオの一覧のセットを使用することができますを参照してください。しかし、SETを使用することで、適切に "equals"と "hashcode"をオーバーライドしていることを確認してください。

3

あなたはそれらが、物事のいずれかを考慮して保持するために使用することができます。

  1. セット固有のデータを提供しますが、それはまた、コストを有しているが。
  2. 場合によっては、テーブルに組織の固有の名前があることを確認してから、リストを選択する必要があります。

あなたはそのような場合には、その後、あなたがソートされたデータを取得するために、SORTインターフェイス(org.springframework.data.domain.Sort)を使用することができ、JPAで春を使用しているように思え。

+0

デフォルトでは、昇順でのみ表示されます – javailike

+0

はいデフォルトのオーダーは昇順ですが、降格するように指定することもできます。 SORT.DIRECTIONをASCまたはDESCとして渡すことができます。ドキュメントhttp://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Sort.html http: /docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Sort.Direction.html –

0

コード内に希望の順序で詳細が追加されていることを確認できる場合はListを使用できます。追加する順序が不明な場合はCollections.sortメソッドを使用できます。このためにOrgTypeimplementComparableインターフェイスにOrgTypeオブジェクトを注文する戦略を提供することもできます。あなたの場合、それはidです。

TreeSetを使用すると、セットに挿入するたびにソートが自動的に行われ、Collections.sortの使用を排除しますが、依然として発注戦略を提供する必要があります。

があり、それがユニークな要素を維持するので、セットを使用してのコストがあるが、あなたが問題になることはありません10行の最大を持っているので、this

を見てください。

0

これは、あなたがイコールとhashCodeメソッドをオーバーライドする必要があると目的をソートするためにあなたがComparableを実装し、次のようにcompareToメソッドを実装する必要がある方法です:

class EntityDetail implements Comparable<EntityDetail>{ 
@Override 
public int hashcode(){ 
    int result = 17; 
    result = 31 * result + name.hashCode(); 
    result = 31 * result + id; 
    return result; 
} 

@Override 
public boolean equals(Object o){ 
    if (o == this) return true; 
    if (!(o instanceof EntityDetail)) { 
     return false; 
    } 

    EntityDetail ed = (EntityDetail) o; 

    return ed.name.equals(name) && 
      ed.id == id ; 

} 

@Override 
public int compareTo(EntityDetail ed) { 
    int compareId = ((EntityDetail) ed).getId(); 

    //ascending order 
    return this.id - compareId; 

    //descending order 
    //return compareId - this.id; 
} 
} 
+0

ありがとう、これは私が – javailike

+0

@ javalikeのために探しているものです。答えを受け入れる。 – KayV

+0

しかし、上記のコードでは、行をリストするだけで、私はこのまばたきを使う必要があるのですか、私は点滅します – javailike

関連する問題