2017-12-22 5 views
0

私のアプリケーションにユーザのアクティビティログデータを保存する必要があります。これには、ユーザーがアクティビティを開始した時刻が含まれます。例えば、午後1時に、開始された「活動A」。午後2時に、ユーザーは「活動B」を開始しました。午後3時に、ユーザーは「Avtivity A」を開始しました。これらのログから、後でタイムラインでデータの範囲を格納するためのデータ構造

のような情報を照会できるようにする必要があります
  1. ユーザーがアクティビティAを午前12時から午後8時までにどれぐらいの長さですか?
  2. ユーザスイッチの活動をしました何回
  3. など

誰もがそのような情報を格納するための良いメモリ内のデータ構造であるものをお勧めすることはできますか?

編集:数千のログが存在する可能性があります。ユーザーは複数のアクティビティを同時に行うことはできません。

+0

あなたは何個のアクティビティをお持ちですか?ユーザーは複数のアクティビティを同時に実行できますか? –

+0

@PetarPetrovic - 何千ものレコードが存在する可能性があります。ユーザーは複数のアクティビティを同時に行うことはできません。 – user2869520

答えて

1

まず、1つのアクティビティがあると仮定してクエリを作成するためのデータ構造を作成してみましょう。

タイムスタンプを格納するリストを用意しましょう(私は整数の例を考えています)。

ArrayList<Integer> integers = new ArrayList<Integer>(); 

これで、タイムスタンプを保存できます。あなたが格納しているとしましょう

integers.add(1); 
integers.add(10); 
integers.add(12); 
integers.add(176); 
integers.add(1678); 

ここで、特定の値のセットにアクセスする必要があります。 JDKのNavigableSetクラスについて考えてみましょう。

NavigableSet<Integer> set = new TreeSet<>(integers); 

あなたは今、複数の活動を格納するためのマップを持って

set.subSet(0, 175); // this will give 1,10,12 from the above values 

を使用して、特定のセットを照会することができます。

Map<String, List> activityTimeStampmap= new HashMap<>(); 

アクティビティが存在しない場合は追加できます。アクティビティが既に存在する場合はリストを更新する必要があります。

希望すると、これが役立ちます。

+0

ありがとう蘭。これは確かに有用です。 – user2869520

関連する問題