-5

pojo である employee というクラスがあり、この pojo タイプの従業員タイプの手段のリストを作成しました..今、リストから重複を削除したいのですが、それを達成するためのさまざまな方法を教えてください..

class Emp implements Comparable
{
      String name,job;
      int salary;
      public Emp(String n,String j,int sal)
      {
         name=n;
         job=j;
         salary=sal;
       }
      public void display()
      {
        System.out.println(name+"\t"+job+"\t"+salary);
       }
      public boolean equals(Object o)
      {
          Emp p=(Emp)o;
          return this.name.equals(p.name)&&this.job.equals(p.job)           &&this.salary==p.salary;
       }
       public int hashCode()
       {
          return name.hashCode()+job.hashCode()+salary;
       }  
       public int compareTo(Object o)
       {
          Emp e=(Emp)o;
          return this.name.compareTo(e.name);
           //return this.job.compareTo(e.job);
          // return this.salary-e.salary;

        }
} 

これが私の従業員タイプのリストです..

import java.util.*;
class EmpListDemo
{
      public static void main(String arg[])
      {
          ArrayList list=new ArrayList();
          list.add(new Emp("Ram","Trainer",34000));
          list.add(new Emp("Sachin","Programmer",24000));
          list.add(new Emp("Priyanka","Manager",54000));
          list.add(1,new Emp("Ravi","Administrator",44000));
                 list.add(new Emp("Ram","Trainer",34000));
          list.add(new Emp("Anupam","Programmer",34000));
list.add(new Emp("Sachin","Programmer",24000));
          list.add(new Emp("Sachin","Team Leader",54000));
          System.out.println("There are "+list.size()+" elements in the list.");
          System.out.println("Content of list are : ");
          ListIterator itr=list.listIterator();
          while(itr.hasNext())
          {
            Emp e=(Emp)itr.next();  
            e.display();
          }   

}
}
4

4 に答える 4

3

配列リストから重複要素を削除するには、重複を許可しないハッシュセットb/cの使用を検討する必要があります。

// Declare your reference variables
ArrayList list = new ArrayList();
HashSet hashSet = new HashSet();

// Put all list elements into hashset
hashSet.addAll(list);
list.clear();
list.addAll(hashSet);
于 2012-08-01T16:20:04.820 に答える
2

次のように、LinkedHashSet を使用して要素の順序を保持できます。

List list = new ArrayList();
// list initialization

LinkedHashSet set = new LinkedHashSet();
set.addAll(list);
list.clear();
list.addAll(set);
于 2012-08-01T16:25:47.463 に答える
1

3つの方法がすぐに思い浮かびます。

  • 各要素のリストを繰り返し、他のすべての要素と照合し、衝突時に他の要素を削除します。ランタイムはO(n ^ 2)にあります

  • リストを並べ替え、それを繰り返し、現在のアイテムAを追跡します。アイテムB!= Aになるまで、後続のアイテムを削除します。リストの最後まで続けます。ランタイムはソート+反復であるため、O(n log n)とO(n ^ 2)の間の何か

  • アイテムをある種のハッシュデータ構造に入れ、リストを空にして、リストに再挿入されるハッシュ値ごとにハッシュ構造から1つのアイテムのみを取得します。正しく実行された場合、ランタイムはO(n)である必要があります

于 2012-08-01T16:21:09.297 に答える
1

1.一意性が重要な場合は、 を使用しますSet

2.HashSetクラスを使用することをお勧めしますが、一意性とともに並べ替えも重要な場合は、 インターフェイスをさらに拡張するインターフェイスTreeSet実装 するものを使用します。SortedSetCollection

3.TreeSetさらに、インターフェイスを使用して、複数の方法で並べ替えることができますComparator

于 2012-08-01T16:37:11.090 に答える