波波老师好,我这边按照课程上的思路,实现了循环队列的逻辑,传送门:LoopQueue
我的问题是,我们实现循环队列的前提是充分利用数组空间,也就是说,只有在循环队列里出现过tail<front
的情况,循环队列才有它自己的意义,但是在测试过程当中发现,出于保证数组安全
和节约空间
的考虑,会根据情况进行resize
操作并随之重排tail
和front
,进而导致tail>=front
,那么,在什么情况下才能出现tail<front
使逻辑自洽呢?
单元测试代码表述如下:
@Test
public void test_tail_lt_front() throws NoSuchFieldException, IllegalAccessException {
LoopQueue<Integer> queue = null;
//TODO begin
// queue = new LoopQueue<>(?);
// ...
// ...
// end
Field tailField = LoopQueue.class.getDeclaredField("tail");
tailField.setAccessible(true);
int tail = (Integer) tailField.get(queue);
Field frontField = LoopQueue.class.getDeclaredField("front");
frontField.setAccessible(true);
int front = (Integer) frontField.get(queue);
Assert.assertTrue(tail < front);
}