我通过与buffer.getInt()读取下一个值,将缓冲区与PriorityQueue的Comparator一起使用(以比较流的元素)。不幸的是,当我下次进行比较时,我失去了这个价值。
因此,是否有可能将int返回到Java中的缓冲区?
我试过像putInt这样的东西,但这是不同的。
提前致谢。
我正在实施外部合并排序
package sort;
import java.util.Comparator;
import inputStream.Mapping.*;
public class extComparator implements Comparator<MapInp>{
@Override
public int compare(MapInp o1, MapInp o2) {
Integer a = o1.readNext();
Integer b = o2.readNext();
return a.compareTo(b);
}
}
然后,我在另一个文件中使用它:
heap = new PriorityQueue<MapInp>(numOfFilesNM/d, new extComparator());
heap.add(new MapInp("data/inp.data"));
....
int t = heap.peek().readNext(); //so, here I am comparing values and loosing the value
MapInt阅读下一篇:
public int readNext() {
if(fileLen-pos-lastPos>bufSize) bufCap = bufSize;
else bufCap = (int) (fileLen-pos-lastPos);
if(buffer.position()==buffer.capacity()) {
lastPos+=pos;
buffer.clear();
try {
buffer = inpCh.map(FileChannel.MapMode.READ_ONLY, lastPos,bufCap);
}
catch (IOException e) {
e.printStackTrace();
}
pos=0;
}
pos+=4;
return buffer.getInt();
}
不幸的是,我仍然没有解决它。抱歉,但是共享整个代码可能会更好:https://www.dropbox.com/s/zqceyg8j6u9kvg7/test.zip?dl=0
最佳答案
您没有显示MapInp
的定义,但是显然它有一个称为readNext
的方法。该方法的名称表明它改进了某种迭代器。迭代器向前移动。heap.peek()
从PriorityQueue<MapInp>
返回顶部项目,而不会打扰队列。可能您需要调用MapInp.readNext()
以外的其他方法来获取t
的值。
顺便说一句,您的评论so, here I am comparing values and loosing the value
似乎不正确,因为如果readNext
根据评论起作用,我会感到惊讶。