1.迭代器接口实现

package com.zhaochao;

public interface Iterator {

boolean hasNext();

E next();

boolean delete();

boolean modify(E e);

int index();

}

2.List接口实现

package com.zhaochao;

public interface List {

//链表大小

int size();

//链表是否为空

boolean isEmpty();

boolean contains(Object o);

Iterator iterator();

Object[] toArray();

T[] toArray(T[] a);

boolean add(E e);

boolean remove(Object o);

boolean containsAll(List> c);

boolean addAll(List extends E> c);

boolean addAll(int index, List extends E> c);

boolean removeAll(List> c);

boolean retainAll(List> c);

void clear();

boolean equals(Object o);

int hashCode();

E get(int index);

E set(int index, E element);

void add(int index, E element) ;

E remove(int index);

int indexOf(E o);

int lastIndexOf(E o);

List subList(int fromIndex, int toIndex);

}

3.异常类实现

package com.zhaochao;

public class IndexOutOfBoundsException extends RuntimeException {

private static final long serialVersionUID = 234122996006267687L;

/**

* Constructs an IndexOutOfBoundsException with no

* detail message.

*/

public IndexOutOfBoundsException() {

super();

}

/**

* Constructs an IndexOutOfBoundsException with the

* specified detail message.

*

* @param s the detail message.

*/

public IndexOutOfBoundsException(String s) {

super(s);

}

}

4.链式结构单链表实现

package com.zhaochao;

import java.util.Arrays;

public class LinkList implements List {

transient int length=0;

transient Node head;

transient Node last;

public LinkList(){

}

public LinkList(List list){

Iterator it=list.iterator();

while(it.hasNext()){

add(it.next());

}

}

private static class Node{

E data;

Node next;

Node(E e){

this.data=e;

this.next=null;

}

Node(Node pre,E e){

this.data=e;

pre.next=next;

}

}

@Override

public int size() {

// TODO Auto-generated method stub

return length;

}

@Override

public boolean isEmpty() {

// TODO Auto-generated method stub

return length==0;

}

@Override

public boolean contains(Object o) {

// TODO Auto-generated method stub

E e=(E)o;

return indexOf(e)!=-1;

}

@Override

public Iterator iterator() {

// TODO Auto-generated method stub

return new LinkIterator();

}

private class LinkIterator implements Iterator{

private int nowIndex;

public LinkIterator() {

// TODO Auto-generated constructor stub

this.nowIndex=0;

}

@Override

public boolean hasNext() {

// TODO Auto-generated method stub

return this.nowIndex

}

@Override

public E next() {

// TODO Auto-generated method stub

E e=get(nowIndex);

nowIndex++;

return e;

}

@Override

public boolean delete() {

// TODO Auto-generated method stub

remove(nowIndex);

return true;

}

@Override

public boolean modify(E e) {

// TODO Auto-generated method stub

set(nowIndex, e);

return true;

}

@Override

public int index() {

// TODO Auto-generated method stub

return nowIndex;

}

}

@Override

public Object[] toArray() {

// TODO Auto-generated method stub

Object[] obj=new Object[length-1];

Iterator it=this.iterator();

int i=0;

while(it.hasNext()){

obj[i++]=it.next();

}

return obj;

}

@Override

public T[] toArray(T[] a) {

// TODO Auto-generated method stub

if (a.length < length)

// Make a new array of a's runtime type, but my contents:

return (T[]) Arrays.copyOf(a, length, a.getClass());

a=(T[])toArray();

if (a.length > length)

a[length] = null;

return a;

}

@Override

public boolean add(E e) {

// TODO Auto-generated method stub

addLast(e);

return false;

}

@Override

public boolean remove(Object o) {

// TODO Auto-generated method stub

while(contains(o)){

E e=(E)o;

remove(indexOf(e));

}

return true;

}

@Override

public boolean containsAll(List> c) {

// TODO Auto-generated method stub

boolean flag=true;

Iterator it=c.iterator();

while(it.hasNext()){

flag=flag&&contains(it.next());

}

return flag;

}

@Override

public boolean addAll(List extends E> c) {

// TODO Auto-generated method stub

Iterator it=c.iterator();

while(it.hasNext()){

add((E)it.next());

}

return true;

}

@Override

public boolean addAll(int index, List extends E> c) {

// TODO Auto-generated method stub

Iterator it=c.iterator();

while(it.hasNext()){

add(index++,(E)it.next());

}

return true;

}

@Override

public boolean removeAll(List> c) {

// TODO Auto-generated method stub

Iterator it=c.iterator();

while(it.hasNext()){

if(contains(it.next()))

remove(it.next());

}

return true;

}

@Override

public boolean retainAll(List> c) {

// TODO Auto-generated method stub

Iterator it=this.iterator();

while(it.hasNext()){

E e=(E) it.next();

if(!c.contains(e))

remove(e);

}

return true;

}

@Override

public void clear() {

// TODO Auto-generated method stub

head=null;

last=null;

length=0;

}

@Override

public E get(int index) {

// TODO Auto-generated method stub

checkRomoveIndex(index);

Node node=head;

for(int i=0;i

node=node.next;

}

return node.data;

}

@Override

public E set(int index, E element) {

// TODO Auto-generated method stub

Node node=getNode(index);

node.data=element;

return element;

}

@Override

public void add(int index, E element) {

// TODO Auto-generated method stub

checkAddIndex(index);

if(index==0){

Node h=head;

Node node=new Node(element);

head=node;

head.next=h;

}else{

Node node=getNode(index-1);

Node newNode=new Node(element);

newNode.next=node.next;

node.next=newNode;

}

length++;

}

@Override

public E remove(int index) {

// TODO Auto-generated method stub

checkRomoveIndex(index);

E e;

if(index==0){

e=head.data;

head=head.next;

}else{

Node node=getNode(index-1);

e=node.next.data;

node.next=node.next.next;

}

length--;

return e;

}

@Override

public int indexOf(E o) {

// TODO Auto-generated method stub

for(int i=0;i

if(get(i).equals(o))

return i;

}

return -1;

}

@Override

public int lastIndexOf(E o) {

// TODO Auto-generated method stub

List ll=new LinkList();

for(int i=0;i

if(get(i).equals(o))

ll.add(i);

}

return (int) ll.get(ll.size()-1);

}

@Override

public List subList(int fromIndex, int toIndex) {

// TODO Auto-generated method stub

checkRomoveIndex(fromIndex);

checkRomoveIndex(toIndex);

List ll=new LinkList();

for(int i=fromIndex;i<=toIndex;i++)

ll.add(get(i));

return ll;

}

private void addLast(E e){

if(head==null){

Node node=new Node(e);

head=node;

last=node;

}else{

Node l=last;

Node node=new Node(l,e);

last=node;

l.next=last;

}

length++;

}

private Node getNode(int index){

checkRomoveIndex(index);

Node node=head;

for(int i=0;i

node=node.next;

}

return node;

}

private void checkRomoveIndex(int index){

if(index<0||index>=length){

throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

}

}

private void checkAddIndex(int index) {

if(index<0||index>length){

throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

}

}

private String outOfBoundsMsg(int index){

return "index:"+index+" length:"+length;

}

}

5.测试

package com.zhaochao;

public class main {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

List ls=new LinkList();

Test t=new Test();

for(int i=0;i<10;i++)

ls.add(t);

Iterator it=ls.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

}

class Test{

public static int a=0;

public String toString(){

return String.valueOf(a++);

}

}

6.测试结果

0

1

2

3

4

5

6

7

8

9

java链式结构_(Java)单链表Java语言链式结构实现(数据结构四)相关推荐

  1. java stack (null -1)_关于单链表实现的一个stack的问题

    背景:菜鸟一枚,想补补基础.最近在看算法 ,1.3.26有一道题是:编写一个方法remove()接受一条链表和一个字符串key作为参数,删除链表中所有的item域为key的节点. 上代码: publi ...

  2. 浅谈:数据结构之单链表,java代码演示单链表

    单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...

  3. java不带头结点单链表,java带头结点的单链表

    JAVA 循环双链表的建立 import java.util.Scanner; //循环双向链表的结点类 class DuLNode { private Object data;// 存放结点值 前驱 ...

  4. 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)

    目录 一.链表(链式存储结构)的特点 二.单链表的定义和表示 1.带头结点的单链表 2.单链表的存储结构 三.单链表基本操作的实现 1.单链表的初始化(带头结点的单链表) 2.补充单链表的几个常用简单 ...

  5. c语言实现可变单链表,c语言实现单链表

    c语言实现单链表 c语言实现单链表 定义 创建 销毁 清空 打印 获取长度 查询 删除第pos个结点 在第pos插入结点 定义 首先来看一看单链表的定义(看看百度的) 单链表是一种链式存取的数据结构, ...

  6. Linux结构体变量报错,C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

  7. java中顺式和链式_Java单链表顺序和链式实现(数据结构五)

    1.迭代器实现 package com.zhaochao; public interface Iterator { boolean hasNext(); E next(); boolean delet ...

  8. java单链表节点翻转_单链表Java实现

    ​ 链表中的结点是以结点来表示,单链表每一个结点有一个指针域和data域,物理位置不是连续的,逻辑上是连续的. 代码实现 class LinkedList<E> {private Node ...

  9. Java实现单链表、栈、队列三种数据结构

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:远航 cnblogs.com/yang-guang- ...

最新文章

  1. 基于路由器网络诊断步骤和故障排除技巧
  2. CentOS7关闭防火墙方法
  3. OpenSSH修改版本号教程
  4. rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇
  5. 大数据成长之路:谈谈那些必须学习的Linux基础知识
  6. 飞书×帆软数知鸟 | 飞书上的一站式需求管理
  7. VB.Command()的参数
  8. C++ 简单实现unorderset和unordermap
  9. 表贴电阻尺寸与什么有关_贴片电阻常见的规格封装和尺寸
  10. GO及其LiteIDE踩坑
  11. Docker - Dockerfile之FROM、ARG、LABEL、MAINTAINER、RUN、CMD指令详解
  12. 选择ip代理软件要看那几点?
  13. linux 程序开发
  14. IAR 配置ICF跟项目走
  15. 云服务器 虚拟主机 故障,云虚拟主机重启服务器
  16. IT人士获得老板青睐器重的五大秘决
  17. 语音识别数据增强方法(google2019年7月论文)
  18. STM32驱动OV7725摄像头颜色识别
  19. realsense环境搭建
  20. html页面跳转href过渡效果,页面锚链接平滑动画过渡纯JS插件

热门文章

  1. Python学习笔记:Day 12 编写日志列表页
  2. 基于fiddler的网络爬虫校园网自动登陆系统
  3. CUDA学习笔记之 CUDA存储器模型
  4. CBLAS的安装与使用
  5. 详解操作系统中虚拟内存与物理内存的关系
  6. 【Paper】研究论文不会写?先来学学怎么做西红柿炒鹌鹑蛋吧!
  7. ustc小道消息20211227
  8. VTK修炼之道10:可视化管道的连接与执行
  9. 不恰当使用read会造成服务器阻塞
  10. JZ2440学习总结5