Java linkedlist中对象的问题

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

在我的count方法中,我试图将发送的对象与调用它的对象进行比较,我不知道为什么我不能调用o.get(i)来获取传递的对象o的值。它告诉我,即使我可以正常调用get(i),也无法找到该方法。你知道我如何得到传递对象的值以便比较它们吗

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);如果它们是不同的对象,您仍然可以进行比较,只是比较可能会有点复杂,最可能需要一些铸造和一些假设