我需要建立一个职位经理课来告诉我职位是否可用。
所以我试过这个:
enter code here
public class PositionManager {
Hashtable currentPositions = new Hashtable();
void occupiedPosition(int x,int y){
this.currentPositions.put(new Integer("4"),new Integer("5"));
this.currentPositions.put(new Integer("1"),new Integer("5"));
this.currentPositions.put(new Integer("11"),new Integer("3"));
this.currentPositions.put(new Integer("42"),new Integer("55"));
this.currentPositions.put(new Integer("11"),new Integer("53"));
Set keys = this.currentPositions.keySet(); // The set of keys in the map.
Iterator keyIter = keys.iterator();
System.out.println("The map contains the following associations:");
while (keyIter.hasNext()) {
Object key = keyIter.next(); // Get the next key.
Object value = this.currentPositions.get(key); // Get the value for that key.
System.out.println( " (" + key + "," + value + ")" );
}
}
public static void main(String[] args) {
new PositionManager().occupiedPosition(3, 3);
}
}
Hashtable currentPositions = new Hashtable();
void occupiedPosition(int x,int y){
this.currentPositions.put(new Integer("4"),new Integer("5"));
this.currentPositions.put(new Integer("1"),new Integer("5"));
this.currentPositions.put(new Integer("11"),new Integer("3"));
this.currentPositions.put(new Integer("42"),new Integer("55"));
this.currentPositions.put(new Integer("11"),new Integer("53"));
Set keys = this.currentPositions.keySet(); // The set of keys in the map.
Iterator keyIter = keys.iterator();
System.out.println("The map contains the following associations:");
while (keyIter.hasNext()) {
Object key = keyIter.next(); // Get the next key.
Object value = this.currentPositions.get(key); // Get the value for that key.
System.out.println( " (" + key + "," + value + ")" );
}
}
public static void main(String[] args) {
new PositionManager().occupiedPosition(3, 3);
}
当然这只是一个测试,我想要做的是检索所有使用的位置,问题是我不能重复键。 那么我应该使用什么样的数据结构。 提前谢谢。
答案 0 :(得分:3)
我通过创建一组位置来解决这个问题。集合模拟只能出现一次的对象集合。相比之下,映射结构存储一组键/值关联。从我对你的问题的解读,我认为一组结构最有意义。
// You might just be able to use an existing Point depending on what you
// want to do with the position
class Position {
int x;
int y;
// implementations of hashCode() + equals()
}
}
您需要实现hashCode(),以便可以在set和equals()中统一分配项目,以便可以比较对象。有关详细信息,请参阅here。
Set<Position> positions = new HashSet<Position>();
positions.add(new Position(3,4));
positions.add(new Position(5,6)); // and so on
确保正确定义equals / hashCode(这里有很多链接)
现在,您可以使用contains方法测试点是否在集合中,例如:
positions.contains(new Point(2,1)); // returns false
positions.contains(new Point(3,4)); // returns true
答案 1 :(得分:0)
我建议使用google-collection's MultiMap
。这实际上是Map<K, Collection<V>>
的托管类型。
同样感兴趣的可能是Multimaps
类,它会为您提供Multimap<K,V> invertFrom(Multimap<V,K>)
然后你最终会得到:
public boolean isPositionOccupied(int x, int y) {
return occupiedPositionsMap.get(x).contains(y);
}
请参阅?哇!不需要空检查或其他废话。
注意:从性能的角度来看,这是相对最优的,但根据您的其他需求,您可能希望使用其他答案中提到的Point
个对象。