嗨,我有以下对象:
Hashtable<Object, Double>
我想在表中查找最大Double值的关键。 要做到这一点最简单的方法?
谢谢
嗨,我有以下对象:
Hashtable<Object, Double>
我想在表中查找最大Double值的关键。 要做到这一点最简单的方法?
谢谢
没有内置的功能得到最大的价值出来的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());
}
}
如果它真的很重要,你做不反复所有按键,简单地扩展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);
}
}
可以遍历并找到最大值:
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);
}
目前还没有特效库的方法,但是你可以按照以下做
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);
}
还有一个重要的抓雅在这里:可能有多个条目具有相同MAX双重价值。
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]