如何查找 HeapQueue 是否包含 Java 中的值?
How to find if a HeapQueue contains a value in Java?
我在编写查找 MaxHeapPriorityQueue 是否包含值的方法时遇到问题。
说明如下:如果在队列中找到给定值,contains(E) 方法应该 return 为真。它应该使用它的私有辅助方法来递归地搜索队列。
这是我目前所掌握的
public class MaxHeapPriorityQueue<E extends Comparable<E>>
{
private E[] elementData;
private int size;
@SuppressWarnings("unchecked")
public MaxHeapPriorityQueue()
{
elementData = (E[]) new Comparable[10];
size = 0;
}
public boolean contains(Object value)
{
return contains(value, 0);
}
private boolean contains(Object value, int index)
{
if(elementData[index] != null && elementData[index] == value)
{
return true;
}
else
{
return contains(value, ++index);
}
}
}
我不知道为什么我遇到这样的麻烦,但这对我有用。我不得不使用大小而不是 elementData.length。
public boolean contains(Object value)
{
return contains(value, 0);
}
private boolean contains(Object value, int index)
{
if (index > size)
{
return false;
}
else if(elementData[index] == value && elementData[index] != null)
{
return true;
}
else
{
return contains(value, ++index);
}
}
这是另一种解决方法。
private boolean contains(Object value, int index)
{
if(index > size || elementData[index].compareTo((E) value) < 0)
{
return false;
}
else if(value.equals(elementData[index]))
{
return true;
}
else
{
return contains(value, leftChild(index)) || contains(value, rightChild(index));
}
}
我在编写查找 MaxHeapPriorityQueue 是否包含值的方法时遇到问题。
说明如下:如果在队列中找到给定值,contains(E) 方法应该 return 为真。它应该使用它的私有辅助方法来递归地搜索队列。
这是我目前所掌握的
public class MaxHeapPriorityQueue<E extends Comparable<E>>
{
private E[] elementData;
private int size;
@SuppressWarnings("unchecked")
public MaxHeapPriorityQueue()
{
elementData = (E[]) new Comparable[10];
size = 0;
}
public boolean contains(Object value)
{
return contains(value, 0);
}
private boolean contains(Object value, int index)
{
if(elementData[index] != null && elementData[index] == value)
{
return true;
}
else
{
return contains(value, ++index);
}
}
}
我不知道为什么我遇到这样的麻烦,但这对我有用。我不得不使用大小而不是 elementData.length。
public boolean contains(Object value)
{
return contains(value, 0);
}
private boolean contains(Object value, int index)
{
if (index > size)
{
return false;
}
else if(elementData[index] == value && elementData[index] != null)
{
return true;
}
else
{
return contains(value, ++index);
}
}
这是另一种解决方法。
private boolean contains(Object value, int index)
{
if(index > size || elementData[index].compareTo((E) value) < 0)
{
return false;
}
else if(value.equals(elementData[index]))
{
return true;
}
else
{
return contains(value, leftChild(index)) || contains(value, rightChild(index));
}
}