2016-04-28 11 views
0

Iユーザオブジェクトのリストがあります。私はすでに等しいメソッドとハッシュメソッドをオーバーライドしています。新しいユーザーがすでにリストに登録されているかどうかを確認したい場合は追加したい場合は追加したい場合はlastTimeSeen属性を更新し、最後の5秒間にユーザーが表示されない場合は削除したいリスト。Javaの配列リストを更新する

public void updateUserList(String firstname, String lastname, String age, Long ts) 
    { 
     User newUser= new User(firstname, lastname, age,ts); 
     if(!listUser.contains(newUser)) 
     listUser.add(newUser); 
     for (int i = 0; i < listUser.size();i++){ 
      //if not equal to new user and ts - listUser[i].lastTimeSeen > 10 second delete user, if equal update time ? 
     } 
    } 

このコードでは、新しいユーザーを追加できましたが、古いユーザーを追加または更新するのは混乱します。私はJavaで新しいです、誰かが私の方法が正しいかどうか教えてもらえませんか?

+2

この特定のタスクには、(パフォーマンス上)より良い「マップ」を使用します。 –

+0

要素を削除するときにリストのサイズが変更されるため、Iteratorを使用する必要があります。 –

+1

この問題では、equals()を再定義した場合は、 'equals()'メソッドに基づいて重複を自動的に検出する 'Set'に基づくコレクションを使うべきです。さらに、「古いユーザーを削除する」の部分はおそらく別の場所で、おそらく別のスレッドで実行されるべきです。 – Preuk

答えて

0

あなたはUserクラスでequalsメソッドをオーバーライドして、このメソッドをimplimentする必要があります。

/** 
* This method find the user in a user list. 
* return null if no any user was found. 
**/ 
private User findUser(ArrayList<User> listUser, User user) { 
    for (User u : listUser) { 
     if (u.equals(user)) { 
      return u; 
     } 
    } 
    return null; 
} 

あなたはこの例のように新しいArrayListを作成しながら、あなたはまた、addメソッドをオーバーライドすることができます。

ArrayList<User> listUser = new ArrayList<User>() { 
    @Override 
    public boolean add(User user) { 
     User u = findUser(this, user); 
     if (u != null) { 
      //udating this user on list 
      return false; 
     } 
     return super.add(user); 
    } 
}; 

今方法を変更することができますupdateUserList

public void updateUserList(String firstname, String lastname, String age, Long ts) { 
    listUser.add(new User(firstname, lastname, age, ts));  
} 

私はIDEにはまだいません。私の答えは間違っている可能性があります。

関連する問題