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

不使用Java内置数组、List等,如何将同类型对象存储到另一类中?

自定义双向链表实现思路

你已经完成的双向节点ListItem可以直接复用,只需要再封装一个CustomLinkedList类统一管理所有节点即可,具体实现逻辑如下:

1. 基础成员定义

CustomLinkedList只需要存储头节点、尾节点和元素计数三个核心属性,不需要提前申请固定大小的存储空间,天然支持动态扩容:

public class CustomLinkedList {
    // 指向链表第一个节点
    private ListItem head;
    // 指向链表最后一个节点
    private ListItem tail;
    // 记录当前链表存储的元素总数
    private int size;

    // 初始化空链表
    public CustomLinkedList() {
        head = null;
        tail = null;
        size = 0;
    }

    // 获取当前元素数量
    public int getSize() {
        return size;
    }

    // 判断链表是否为空
    public boolean isEmpty() {
        return size == 0;
    }
}

2. 核心增删方法实现

尾部添加元素(默认添加逻辑)

// 向链表末尾添加新元素
public void add(String value) {
    ListItem newNode = new ListItem(value);
    if (isEmpty()) {
        // 空链表时新节点既是头也是尾
        head = newNode;
        tail = newNode;
    } else {
        // 关联原尾节点和新节点
        tail.setNextItem(newNode);
        newNode.setPreviousItem(tail);
        // 更新尾节点指针
        tail = newNode;
    }
    size++;
}

其他增删逻辑(头部添加、指定位置插入、删除指定元素等)只需要对应调整前后节点的nextItem、previousItem指针,同时更新size计数即可。

3. 双向遍历能力实现

可以直接内置遍历方法,也可以实现自定义迭代器对外暴露遍历能力:

内置正反遍历方法

// 正向遍历(从头部到尾部)
public void printForward() {
    ListItem current = head;
    while (current != null) {
        System.out.println(current.getValue());
        current = current.getNextItem();
    }
}

// 反向遍历(从尾部到头部)
public void printBackward() {
    ListItem current = tail;
    while (current != null) {
        System.out.println(current.getValue());
        current = current.getPreviousItem();
    }
}

自定义迭代器实现

如果需要类似Java标准集合的迭代器用法,可以新增内部迭代器类:

public ListIterator iterator() {
    return new ListIterator();
}

public class ListIterator {
    private ListItem current = head;

    // 判断是否有下一个元素
    public boolean hasNext() {
        return current != null;
    }

    // 获取下一个元素
    public String next() {
        String val = current.getValue();
        current = current.getNextItem();
        return val;
    }

    // 判断是否有上一个元素
    public boolean hasPrevious() {
        return current != null;
    }

    // 获取上一个元素
    public String previous() {
        String val = current.getValue();
        current = current.getPreviousItem();
        return val;
    }
}

动态特性说明

链表结构本身不需要固定容量,每次新增元素时才会创建节点对象,只要JVM内存充足就可以一直新增元素,size计数会随元素增删自动更新,完全满足动态调整大小的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:24:04