я могу скопировать массив в хэш-таблицу? - PullRequest
1 голос
/ 19 ноября 2010

У меня есть массив с элементами float. Как я могу скопировать этот массив в хеш-таблицу?

спасибо

Ответы [ 5 ]

3 голосов
/ 19 ноября 2010

Массив не может напрямую соответствовать карте. Может соответствовать набору.

new HashSet(Arrays.asList(array))
3 голосов
/ 19 ноября 2010

Вы можете легко поместить их в Hashtable из int -> float.Следующий метод будет использовать их индекс в массиве в качестве ключа.

float[] arr;
Hashtable<Integer, Float> table = new Hashtable<Integer, Float>(arr.length);
for (int i = 0; i < arr.length; i++) {
    table.put(i, arr[i]);
}
0 голосов
/ 19 ноября 2010

Если вы хотите узнать, сколько существует различных значений с плавающей точкой в ​​вашем массиве, лучшим решением будет мультимножество (которое обычно строится поверх Map<T, Integer>). С Гуава вы можете сделать это:

float[] floats = ...
Multiset<Float> multiset = HashMultiset.create(Floats.asList(floats));
for (Multiset.Entry<Float> entry : multiset.entrySet()) {
  Float value = entry.getElement();
  int count = entry.getCount();
  ...
}
0 голосов
/ 19 ноября 2010

Учитывая разъяснение ОП своих требований в ответе jjnguy, вот O(n) (амортизированный) способ подсчета появлений уникальных значений в массиве с плавающей запятой:

float[] values;
Map<Float, Integer> occurrences = new HashMap<Float, Integer>();
for ( float f : values ) {
    int count = occurrences.containsKey(f) ? occurrences.get(f) : 0;
    occurrences.put(f, count+1);
}

//then find multiple occurrences by finding entries with a value > 0
for ( Entry<Float, Integer> entry : occurrences.values() ) {
    if ( entry.getValue() > 1 ) {
       System.out.println("Duplicate: " + entry.getKey());
    }
}

На практике обычно вонючее использовать float в качестве ключа ко всему или использовать float таким образом, который притворяется, что это дискретное значение. Типы с плавающей запятой обычно используются для имитации «непрерывных» значений, где для всех намерений и целей 7,000000000012 следует рассматривать как 7,000000000013.

0 голосов
/ 19 ноября 2010

Hashtable реализует Map, поэтому вам нужно будет соединить каждый float с некоторым ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...