Java 在这个实例中可以使用哈希表吗?

Java 在这个实例中可以使用哈希表吗?,java,heap,hashtable,priority-queue,Java,Heap,Hashtable,Priority Queue,所以我有一个单独的最小和最大优先级队列,需要一种方法来协调它们。我有歌曲对象,每个对象都有3个整数。有没有办法使用哈希表来协调优先级队列中的“堆”?例如,这里是我的歌曲构造器 public Song(int name, int N, int L) { this.name = name; . . . } 稍后,当我插入PriorityQueues时,我想将min和max队列中的值与p值关联,p值由 P = N+2L 比如说,在创造和增加价值时,我会说 public SongCo

所以我有一个单独的最小和最大优先级队列,需要一种方法来协调它们。我有歌曲对象,每个对象都有3个整数。有没有办法使用哈希表来协调优先级队列中的“堆”?例如,这里是我的歌曲构造器

public Song(int name, int N, int L) {
    this.name = name;
    . . .
}
稍后,当我插入PriorityQueues时,我想将min和max队列中的值与p值关联,p值由

P = N+2L
比如说,在创造和增加价值时,我会说

public SongCollection() {
    max = new PriorityQueue<Integer>(500, Collections.reverseOrder());
    min = new PriorityQueue<Integer>(500);
    hash = new Hashtable<Song,Integer>();
}

addSong(int date) {
    Song song = new Song(date, 20, 20);
    hash.put(song, song.getP());
    max.add(song.getP());
    min.add(song.getP());
}
publicsongcollection(){
max=newpriorityqueue(500,Collections.reverseOrder());
最小值=新的优先级队列(500);
hash=新哈希表();
}
addSong(国际日期){
歌曲=新歌(日期,20,20);
hash.put(song,song.getP());
max.add(song.getP());
min.add(song.getP());
}
稍后,我想通过修改与我要修改的歌曲对象相关的歌曲对象来更新歌曲的“N”和“L”值


这是正确的设置方法吗?我是否可以稍后调用min堆中的最低值,恢复其song对象,然后删除该对象和我堆中的两个实例?

两个自定义比较器都只是实现自然顺序,因此没有必要;此外,您还可以编写与返回lhs相同的代码。compareTo(rhs)@AndyTurner谢谢,我已经更正了它。如果更改队列中已存在对象的排序顺序,则不会指定
PriorityQueue
的行为。首先从两个队列中删除对象,然后对其进行修改,然后将其放回两个队列中。@jameslarge我也这样做了,谢谢。现在的问题是,我如何用P值查找某个歌曲对象?假设我想从队列中删除最小的P值,我找到最小值,然后将其与哈希表关联(不知何故),然后从max中删除它。等等,为什么
PriorityQueue
?为什么不
PriorityQueue
?哈希表的用途是什么?如果你有一首歌,你可以调用Song.getP(),那么为什么你需要在散列中查找P呢?你的两个自定义比较器都只是实现自然顺序,因此没有必要;此外,您还可以编写与返回lhs相同的代码。compareTo(rhs)@AndyTurner谢谢,我已经更正了它。如果更改队列中已存在对象的排序顺序,则不会指定
PriorityQueue
的行为。首先从两个队列中删除对象,然后对其进行修改,然后将其放回两个队列中。@jameslarge我也这样做了,谢谢。现在的问题是,我如何用P值查找某个歌曲对象?假设我想从队列中删除最小的P值,我找到最小值,然后将其与哈希表关联(不知何故),然后从max中删除它。等等,为什么
PriorityQueue
?为什么不
PriorityQueue
?哈希表的用途是什么?如果您有一首歌,可以调用Song.getP(),那么为什么需要在散列中查找P呢?