0

以下の方法 ( generateID()) はランダムな ID を生成します. 学生を保存するときHashMap, 生成された ID が hashMap 値に存在しないかどうかを確認し, 存在する場合は新しい ID を生成して保存します.メソッドストアの問題 一部の学生が同じIDを持っている可能性があり、これが許可されていないため、すべての学生を保存しない場合があります。したがって、すべてのIDが一意であることを確認する最善の理由は何ですか?重複がある場合、メソッド generateid はutil すべての ID が uniqe であると再度​​呼び出され、それが保存されgenerateId()ます。

 private String generateId(String perfix, int numberaOfDigits)
    {
        for(int i=0;i<numberaOfDigits;i++)
        {
            perfix +=  randomGenerator.nextInt(9)+ 1; 

        }
        return perfix;
    }



 public void store(Student student) 
    {   

        int index = 0;


            studentMap.setId(generateId("AB-",1));

            while(index <= studentMap.size())

            {
                for(Student stu : studentMap.values() )

                {
                    if(student.getStduentID().equals(stu.getStduentID()))

                    {
                        student.setId(generateId("AB-",1));
                    } 

                }
                index++;
            }
        }
        studentMap.put(student.getStduentID(),student);

    }
4

6 に答える 6

1

メソッドを使用してcontainsKey()、ID が既にキーとして使用されているかどうかを確認できます

于 2013-04-16T12:21:01.357 に答える
0

毎回一意の乱数を取得するために、次の実装を試すことをお勧めします。

  1. リストに項目を追加します。
  2. Collections.shuffle(list);リストをシャッフルするために使用します。
  3. リストを反復処理し、指定された範囲から毎回乱数を取得します。(以下の場合、範囲は 0 から numberOfStudent-1 までです)。

    int numberOfStudent = 10;
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < numberOfStudent; i++) 
        list.add(i);    
    
    Collections.shuffle(list);
    
于 2013-04-16T12:26:02.867 に答える
0

generateId()私はこの方法を完全に排除し、単純にこれを行います:

private int id;

それから:

student.setId(id++);
于 2013-04-16T12:32:41.787 に答える
0

それが実際に Map 実装である場合は、.containsKey() を使用できるはずです。問題は、ID ジェネレーターの書き方によっては、時間の経過とともに重大なパフォーマンスの問題が発生する可能性があることです。あなたが 6 桁の ID を持っていて、数年間で 80000 人の学生がこのシステムを通過したとします。残りの 20000 個の利用可能なキーの 1 つを見つけるには、何回の推測が必要ですか?

于 2013-04-16T12:22:38.113 に答える
0

get生成された ID を使用してマップから取得できます。マップが を返す場合、マップnullはまだ存在しません。

Map<Long, Object> myMap = new HashMap<Long, Object>();
Long id = generateRandomId()
Object value = getMyObjectValue();

while(myMap.get(id) != null){
    id = generateRandomId();
}

myMap.put(id, value);
于 2013-04-16T12:20:54.607 に答える
0

UUID を使用します。またはすでに回答済みのシーケンス

于 2013-04-16T12:21:21.350 に答える