You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Test<Double>类调用size()方法提示未定义,如何正确实现该方法?

问题原因

你自定义的Test类是手写的链表结构,类内部没有定义size()成员方法,所以调用numbers.size()时编译器找不到对应方法才会抛出该错误。

size()方法实现方案

有两种实现方式可选:

方式1:维护计数器变量(推荐,性能更高)

  • 给Test类新增一个int类型的私有成员变量n,用来记录当前链表存储的元素个数
  • 在add()方法每成功添加一个元素时,将n自增1
  • 新增size()方法直接返回n的值
    修改后的完整代码如下:
public class Test<Item> implements Iterable<Item>
{
    private Node first; // 链表首节点
    private int n = 0; // 新增元素计数器
    private class Node
    {
        Item item;
        Node next;
    }
    public void add(Item item)
    { 
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
        n++; // 添加元素后计数器自增
    }

    // 新增size方法
    public int size() {
        return n;
    }

    public Iterator<Item> iterator()
    { return new ListIterator(); }
    private class ListIterator implements Iterator<Item>
    {
        private Node current = first;
        public boolean hasNext()
        { return current != null; }
        public void remove() { }
        public Item next()
        {
            Item item = current.item;
            current = current.next;
            return item;
        }
    }
}

方式2:遍历链表统计个数(不推荐)

如果不想额外维护计数器,也可以每次调用size时遍历整个链表统计节点数,时间复杂度为O(n),仅适合数据量小的场景:

public int size() {
    int count = 0;
    Node cur = first;
    while(cur != null) {
        count++;
        cur = cur.next;
    }
    return count;
}

是否必须定义size方法?

只要你需要获取当前Test实例存储的元素个数,就必须自己实现这个方法,JDK不会给自定义类自动生成size逻辑。如果你没有获取元素总数的需求,也可以不用实现,比如你只是要遍历所有元素的话,直接用已经实现好的Iterable迭代器遍历即可,不需要调用size方法,示例如下:

Test<Double> numbers = new Test<>();
// 省略控制台输入调用add添加元素的逻辑
for(Double d : numbers) {
    System.out.println(d);
}

内容的提问来源于stack exchange,提问作者Firefox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:12:04