0

ユーザーセッションを保存するためにJavaでキャッシュを作成したいと思います。これは、たとえばすべてのユーザーに対して5つの要素を格納するキャッシュのようなものです。このデータを記憶できる必要がある、ある種のJavaデータ構造が必要です。これまでのところ、私はこのJavaコードを作成しました。

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class SessionCache {

    public SessionCache() {
    }

    /* Create object to store sessions */
    private List<ActiveSessionsObj> dataList = new ArrayList<>();

    public static class ActiveSessionsObj {
        private int one;
        private int two;
        private int three;
        private int four;
        private int five;

        private ActiveSessionsObj(int one, int two, int three, int four, int five) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    }

    public List<ActiveSessionsObj> addCache(int one, int two, int three, int four, int five){

        dataList.add(new ActiveSessionsObj(
                        one,
                        two,
                        three,
                        four,
                        five));
          return dataList;    
    }   

}

私はJavaを初めて使用するので、構造にデータを追加する方法と、構造からデータを削除する方法についてサポートが必要です。キーを使用してこれを行う必要があります。これは可能ですか?または、muのニーズに応じてデータを保存するためのより適切なデータ構造がありますか?

幸運をお祈りしています

4

3 に答える 3

6

おそらく各ユーザーは一意の ID を持っているため、キーがユーザー ID で値が次Mapのような実装は賢明な選択のようです。ActiveSessionsObj

Map<String, ActiveSessionsObj> cache =
    new HashMap<String, ActiveSessionsObj>();

からの要素の追加 ( put()) および削除 ( )については、Javadoc を参照してください。remove()Map

public void addCache(String user_id,int one,int two,int three,int four,int five)
{
    // You may want to check if an entry already exists for a user,
    // depends on logic in your application. Otherwise, this will
    // replace any previous entry for 'user_id'.
    cache.put(user_id, new ActiveSessionsObj(one, two, three, four, five));
}
于 2012-05-01T10:36:42.710 に答える
2

データオブジェクトを保存するには、 Mapインターフェイスのインスタンスを利用する必要があります。ユーザーごとに一意のキーがあることを確認する必要があります。そうする場合は、このキーをHashMapへの入力として使用できます。

また、SessionCacheがActiveSessionsObjの内部の詳細に依存しないようにするには、addCacheメソッドにActiveSessionsObjsの1つを使用させる必要があります。マップの実装では、これは次のようになります。

public void addCache(String key, ActiveSessionsObj data){

    dataMap.put(key, data);

}   

キャッシュのカプセル化を破っているので、SessionCacheからマップを返さないことをお勧めします。

于 2012-05-01T10:46:32.270 に答える
2

基本的に、 にリストは必要ありません。SessionCacheいくつかのプライベート プロパティを定義し、get setそれらのプロパティにアクセスするためのいくつかの復活したメソッドを提供するだけです。

于 2012-05-01T10:36:27.457 に答える