4

Вопрос по hashtable, max, java – undefined

Привет у меня есть следующий объект:

Hashtable<Object, Double>

и я хочу найти ключ максимального значения Double в таблице. Самый простой способ сделать это?

Спасибо

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Вам нужно пройтись по всем ключам.

    от Brian Roach
5 ответов
  • 4

    Если это действительно важно

    вы делаете это без итерации всех ключей, просто расширяйтеHashTable

    class MyHashtable extends Hashtable<Object, Double> {
    
        private Double maxValue = Double.MIN_VALUE;
    
        @Override
        public synchronized Double put(Object k, Double v) {
            maxValue = Math.max(maxValue, v);
            return super.put(k, v);
        }
    
        @Override
        public synchronized void clear() {
            super.clear();
            maxValue = Double.MIN_VALUE;
        }
    
        public Double getMaxValue() {
            return maxValue;
        }
    
        @Override
        public synchronized Double remove(Object key) {
            // TODO: Left as an Excercise for the user, refer the other answers
            return super.remove(key);
        }
    }
    

  • 0

    Для этого нет конкретного библиотечного метода

    но вы можете сделать это, как показано ниже

    Hashtable<Object, Double> hashTable = new Hashtable<Object, Double>();
              hashTable.put("a", 10.0);
              hashTable.put("b", 15.0);
              hashTable.put("c", 18.0);
    
              Collection<Double> values = hashTable.values();
              Double maxValue = Collections.max(values);
              Enumeration<Object> keys = hashTable.keys();
              while(keys.hasMoreElements()){
                  Object key = keys.nextElement();
                  if((hashTable.get(key)).equals(maxValue))
                      System.out.println(key);
              }
    

  • 0

    Вы можете просмотреть и найти максимальное значение:

    public static void main(String[] args) {
        Map<Object, Double> maps = new HashMap<Object, Double>();
        maps.put("5", new Double(50.0));
        maps.put("4", new Double(40.0));
        maps.put("2", new Double(20.0));
        maps.put("1", new Double(100.0));
        maps.put("3", new Double(30.0));
        maps.put("5", new Double(50.0));
    
        Double max = Double.MIN_VALUE;
        for(Object key: maps.keySet()) {
            Double tmp = maps.get(key);
            if(tmp.compareTo(max) > 0) {
                max = tmp;
            }
        }
    
        System.out.println(max);
    }
    

  • 6

    Там нет встроенной функции, чтобы получить максимальное значение из

    Hashtable вам придется перебрать все клавиши и вручную определить макс.

    Object maxKey=null;
    Double maxValue = Double.MIN_VALUE; 
    for(Map.Entry<Object,Double> entry : table.entrySet()) {
         if(entry.getValue() > maxValue) {
             maxValue = entry.getValue();
             maxKey = entry.getKey();
         }
    }
    

    Изменить: чтобы найти более 1 ключа для максимального значения

    ArrayList<Object> maxKeys= new ArrayList<Object>();
    Double maxValue = Double.MIN_VALUE; 
    for(Map.Entry<Object,Double> entry : table.entrySet()) {
         if(entry.getValue() > maxValue) {
             maxKeys.clear(); /* New max remove all current keys */
             maxKeys.add(entry.getKey());
             maxValue = entry.getValue();
         }
         else if(entry.getValue() == maxValue)
         {
           maxKeys.add(entry.getKey());
         }
    }
    

  • 0

    здесь есть важное замечание

    может быть несколько записей с одинаковым значением MAX double.

    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;
    import java.util.Map;
    
    
    public class HashtableTest {
    
        public static void main(String[] args){
            Hashtable<Object, Double> table = new Hashtable<Object, Double>();
        table.put("a", 10.0);
        table.put("b", 15.0);
        table.put("c", 18.0);
        table.put("d", 18.0);
    
    
            List<Object> maxKeyList=new ArrayList<Object>();
            Double maxValue = Double.MIN_VALUE; 
            for(Map.Entry<Object,Double> entry : table.entrySet()) {
                 if(entry.getValue() > maxValue) {
                     maxValue = entry.getValue();
                     maxKeyList.add(entry.getKey());
                 }
            }
            System.out.println("All max Keys : "+maxKeyList);
        }
    }
    

    результат: все максимальные ключи: [b, d]