package com.alist; class alist<K> { private Object val; private alist<K> head,now,temp,next; private int length = 0; public alist() { head = now = this; } public Object get(int Count) { temp = head; for(int i=0;i<length;i++) { if(i==Count) { return temp.val; } temp = temp.next; } return null; } public int getLength() { return this.length; } public void add(K InVal) { now.val = InVal; now.next = new alist<K>(); now = now.next; this.length ++; } }
public class test1 { public static void main(String[] args) { /*面向对象形链表对象的创建,类似于C语言的List *head=(List*)malloc(sizeof(List));,其实new就是给对象分配合适的内存空间啦*/ alist<Integer> list = new alist<Integer>(); /*面向对象形链表使用示例*/ for(int i=0;i<20;i++) list.add(i); for(int i=0;i<list.getLength();i++) System.out.println(list.get(i)); /*如何实现类似C语言传入指针修改指针保存的地址对应的指的示例,int之类的基本类型,基本上是无法做到这种事的,简单来说就是只有new出来的东西才有可能做到(还不是全部),因为传来传去的时候传的都是地址,int直接在java里面就是传值*/ } }
其实也可以很直观地发现,我把链表的操作都包装在了alist里面,可以避免其他人操作链表不规范所带来的bug,例如这个class提交给其他程序员的时候他们只要知道用add和get方法就可以了,remove之类的懒得写了,反正JAVA本身就有ArrayList实现链表功能,我只是写个小例子