2016-12-02 62 views

回答

1

計算您的數字值的散列值並計算重複散列值的數量。

的簡單實現的,這可能是:

List<Integer> yourValues = /* Your set of numbers */; 
Map<Integer, Set<Integer>> map = new HashMap<>(); 
// Insert all elements into buckets based on their hash value 
yourValues.forEach(value -> { 
    if (!map.containsKey(value.hashCode())) 
     map.put(value.hashCode(), new HashSet<>()); 
    map.get(value.hashCode()).add(value); 
}); 
// Sum up the number of values in each bucket, subtract the number of buckets, so only duplicate values are counted 
int collisions = map.values().stream().map(Set::size).reduce(0, Integer::sum) - map.size(); 
System.out.printf("Number of collisions: %d\n", collisions); 
+0

謝謝你。但是,我對你的數據類型是什麼有點困惑。你能澄清一下嗎? – Name158

+0

它是整數值的集合。可能是列表或設置。我改變了答案。 – Palle

相關問題