2017-06-17 4 views
0

私は現在、特別な興味、メジャーなどに関する質問に対する回答に基づいて、推奨する学生グループにユーザーを対応させるJavaプログラムを作成しています。 各ユーザーは、 。各生徒グループは、Groupオブジェクトによって定義されます。生徒との類似性による学生クラブのリンクリストのソート

Iは、例えば、特定のscore-を各特定のグループインスタンスを割り当てる加工方法を有していて、グループschoolNewspaper 72のスコアを有し、そしてグループ映画製作者は、99

のスコアを有する各グループオブジェクトも有しています

これは、ユーザーのスコアとクラブのスコアの間の絶対値による類似性を表します。例えば、誰かがクイズを取って71を取得した場合、schoolNewspaperの差分値は1に割り当てられ、filmMakers Groupには26の差分値が割り当てられます。

ユーザーのスコアは、すべてのグループスコア各グループに差分値を割り当てる。私は、すべてのグループを含むリンクされたリストを作成し、最小値のものがリストの先頭になるように並べ替えたいと思います。これは、5つの最も類似したグループを使用してユーザーの推奨事項を作成するためです。繰り返し検索するのではなく、リストを並べ替えて最初の5つの要素を取る方が効果的だと思います。

このプロセスを簡単にするJavaライブラリに現在のソート方法が存在するかどうかはわかりません。特定のライブラリ操作の使用方法を理解せずにホイールを再作成しようとすることがあります。したがって、一意のオブジェクト内で定義された整数値を使用して、そのようなオブジェクトのリンクリストを注文する特定の方法はありますか?私はプログラミングには比較的新しいので、アプローチ/理論の面で大きな助けとなるでしょう。

編集:リンクされたリストではなく、このソートでは他のデータ構造が適している可能性がありますか?

+0

ありがとう!私は実際に最初にこの質問を読んでいましたが、それはライブラリ操作を使用して文字列でソートすることでした。これは具体的には整数を扱います – rubyquartz

+0

なぜあなたは整数のソートに同じ答えを使用できませんか? –

答えて

2

あなたはCollections.sort(List<Group> groups)を使用してグループのリストをソートするComparableインタフェースを使用することができます。グループの実装の

例:

で:ただ、サイドノートとして

public class Group implements Comparable{ 
    private int difference; 
    ... //code 

    public int compareTo(Group g) { 
     int diff = g.getDiff(); 
     if(diff > this.difference) { // compared Group obj has greater diff 
      return -1; 
     }else if(diff == this.difference) { // compared Group obj has equal diff 
      return 0; 
     }else { // compared Group obj has lesser difference 
      return 1; 
     } 
    } 
} 

「各グループオブジェクトには整数値があり、

int difference; 

これは、ユーザーのスコアとクラブの得点との間の絶対値による類似性を表します。たとえば、誰かがクイズを取り、71を取得した場合、schoolNewspaperの差分値は1に割り当てられ、filmMakersグループには26の差分値が割り当てられます。 "

このプログラムでは、ユーザがプログラムを使用しているときのフィードバック、または集合的に基づいていますか?

私はUser-objectによって後者の場合、異なるスコアのユーザーを収集する方が効率的です。それぞれのUserオブジェクトを異なるスコアで渡してメソッドの違いを計算し、上記のようなソート実装を各ユーザーに使用してください。

ユーザーオブジェクトは、一致したグループオブジェクトのトップ5リストを渡すことができます。このようにして、すべてのグループオブジェクトのdifference値を更新する必要はなく、各グループの複数のインスタンスを作成する必要もありません。 :)

関連する問題