Java linkedlist中对象的问题
在我的count方法中,我试图将发送的对象与调用它的对象进行比较,我不知道为什么我不能调用o.get(i)来获取传递的对象o的值。它告诉我,即使我可以正常调用get(i),也无法找到该方法。你知道我如何得到传递对象的值以便比较它们吗Java linkedlist中对象的问题,java,object,Java,Object,在我的count方法中,我试图将发送的对象与调用它的对象进行比较,我不知道为什么我不能调用o.get(i)来获取传递的对象o的值。它告诉我,即使我可以正常调用get(i),也无法找到该方法。你知道我如何得到传递对象的值以便比较它们吗 public class GenericLinkedList<E> implements List<E> { private class Node<E>{ private E data; private Node
public class GenericLinkedList<E> implements List<E> {
private class Node<E>{
private E data;
private Node<E> next;
}
private E data;
private Node<E> head = null;
private int size = 0;
private Node<E> nodeAt(int index){
Node<E> curNode = head;
int curIndex = 0;
while(curIndex < index){
curNode = curNode.next;
curIndex++;
}
return curNode;
}
@Override
public E get(int index) {
return nodeAt(index).data;
}
@Override
public void add(E value) {
Node<E> node = new Node<E>();
node.data = value;
if(size == 0){
head = node;
}else{
Node<E> curNode = nodeAt(size - 1);
curNode.next = node;
}
size++;
}
public void add(int index, E value){
Node<E> node = new Node<E>();
node.data = value;
if(size == 0){
head = node;
}else if(index == 0){
node.next = head;
head = node;
}else{
Node<E> curNode = nodeAt(index - 1);
node.next = curNode.next;
curNode.next = node;
}
size++;
}
@Override
public void remove(int index) {
if(index == 0){
head = head.next;
}else{
Node<E> curNode = nodeAt(index - 1);
curNode.next = curNode.next.next;
}
size--;
}
@Override
public void set(int index, E value) {
nodeAt(index).data = value;
}
public String toString(){
String s = "";
Node<E> curNode = head;
s += curNode.data +" -> ";
while(curNode.next != null){
curNode = curNode.next;
s += curNode.data +" -> ";
}
s += "null";
return s;
}
public void clear() {
for (int i = 0; i < size; i++)
set(i, null);
size = 0;
}
@Override
public void removeAll(E o)//Clears out the array object by setting everything to null
{
for(int i = 0; i < this.size; i++)
{
}
}
@Override
public int count(Object o)
{
System.out.println(o);
int count = 0;
for(int i = 0; i< size;i++)
{
if(get(i) == o.get(i))
{
count++;
}
}
return count;
/*int count = 0;
for(int i = 0;i<this.size;i++)
{
for(int j = 0;i<size;j++)
{
}
}
return count;*/
}
public void reverse()
{
int x = size;
for(int i = 0; i < this.size; i++)
{
E temp = this.get(x);
this.set(x, get(i));
this.set(i, temp);
x++;
}
}
public Object subList(int beginIndex, int endIndex)
{
int j = 0;
GenericLinkedList<E> LinkedList = new GenericLinkedList<E>();
if(beginIndex == endIndex)
return LinkedList;
else if(beginIndex > endIndex||endIndex>size||beginIndex<0)
{
return null;
}
else
{
for(int i = beginIndex; i <= endIndex;i++)
{
LinkedList.add(get(i));
j++;
}
}
return LinkedList;
}
public static void main(String[] args) {
GenericLinkedList<Integer> myList = new GenericLinkedList<Integer>();
myList.add(4);
myList.add(7);
myList.add(123123);
System.out.println(myList.get(2));
GenericLinkedList<Integer> myList2 = new GenericLinkedList<Integer>();
myList2.add(4);
myList2.add(7);
myList2.add(8);
myList2.add(3,999);
System.out.println(myList2);
System.out.println(myList.count(myList2));
//System.out.println(myList2);
// myList2.clear();//Testing our clear class
// System.out.println(myList2);
//System.out.println(myList2.subList(1, 3));//Testing our clear class
// System.out.println(myList2);
}
公共类GenericLinkedList实现列表{
私有类节点{
私人电子数据;
私有节点下一步;
}
私人电子数据;
私有节点头=null;
私有整数大小=0;
私有节点节点(int索引){
节点curNode=头部;
int-curIndex=0;
while(curIndex”;
while(curNode.next!=null){
curNode=curNode.next;
s+=curNode.data+“->”;
}
s+=“空”;
返回s;
}
公共无效清除(){
对于(int i=0;i 对于(int i=0;isize | | beginIndex您在尝试调用o.get()
时遇到问题,因为它是基类型对象的对象,没有定义方法。要获得正确的结果,有两种可能的解决方案
简短的解决方案是键入cast
((GenericLinkedList<Object>)o).get(i)
((GenericLinkedList)o).get(i)
或者,更易于阅读的解决方案是更改计数方法的签名:
public int count(GenericLinkList<E> list) {
...
}
公共整数计数(通用链接列表){
...
}
将计数方法更改为公共int-GenericLinkedList(对象o)
如果使用Object作为参数类型,则只能调用Object上可用的方法。在调用Object
引用上调用get
时,可能需要在调用o.get(i)
之前将o
转换为GenericLinkedList
,或者可以更改计数(对象o)
方法以获取GenericLinkedList
参数。这就是我以前使用它的方式,我也遇到了同样的问题。这是可行的,但是当从我的主方法调用它时,我将如何转换我的列表?如果两者都是相同类型的列表(即GenericLinkList),只需调用list.count(列表2);如果它们是不同的对象,您仍然可以进行比较,只是比较可能会有点复杂,最可能需要一些铸造和一些假设