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;

public abstract class abstrctList implements List {

@Override

public boolean isEmpty() {

// TODO Auto-generated method stub

return size()==0;

}

@Override

public boolean contains(Object o) {

// TODO Auto-generated method stub

E e=(E)o;

return indexOf(e)!=-1;

}

@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 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;

}

public void checkRomoveIndex(int index){

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

throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

}

}

public void checkIndex(int index) {

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

throw new IndexOutOfBoundsException(outOfBoundsMsg(index));

}

}

public String outOfBoundsMsg(int index){

return "index:"+index+" length:"+size();

}

}

5.单链表顺序实现

package com.zhaochao;

import java.util.Arrays;

public class LinearList extends abstrctList implements List {

final static int INITIAL_CAPACITY=100;

final static int INCREMENT_SIZE=10;

transient Object [] item;

transient int capacity=0;

transient int length=0;

LinearList(){

this.item=new Object[INITIAL_CAPACITY];

this.capacity=INITIAL_CAPACITY;

}

LinearList(Listlist){

this.length=list.size();

this.capacity=this.length;

this.item=list.toArray();

}

@Override

public int size() {

// TODO Auto-generated method stub

return this.length;

}

@Override

public Iterator iterator() {

// TODO Auto-generated method stub

return new LinearIterator();

}

private class LinearIterator implements Iterator{

private int nowIndex;

public LinearIterator() {

// 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=(E) item[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

item[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];

for(int i=0;i

obj[i]=item[i];

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(item, length, a.getClass());

System.arraycopy(item, 0, a, 0, length);

if (a.length > length)

a[length] = null;

return a;

}

@Override

public boolean add(E e) {

// TODO Auto-generated method stub

addLast(e);

return true;

}

@Override

public void clear() {

// TODO Auto-generated method stub

this.item=new Object[INITIAL_CAPACITY];

this.capacity=INITIAL_CAPACITY;

}

@Override

public E get(int index) {

// TODO Auto-generated method stub

checkIndex(index);

return (E) item[index];

}

@Override

public E set(int index, E element) {

// TODO Auto-generated method stub

checkIndex(index);

item[index]=element;

return element;

}

@Override

public void add(int index, E element) {

// TODO Auto-generated method stub

checkIndex(index);

checkCapacity();

System.arraycopy(item, index, item, index+1,length-index);

item[index]=element;

length++;

}

@Override

public E remove(int index) {

// TODO Auto-generated method stub

checkRomoveIndex(index);

E e=(E) item[index];

System.arraycopy(item, index+1, item, index,length-index-1);

length--;

return e;

}

@Override

public List subList(int fromIndex, int toIndex) {

// TODO Auto-generated method stub

checkRomoveIndex(fromIndex);

checkRomoveIndex(toIndex);

List ll=new LinearList();

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

ll.add(get(i));

return ll;

}

private void addLast(E e){

checkCapacity();

item[length]=e;

length++;

}

private void checkCapacity(){

if(length>=capacity){

Object []obj=new Object[capacity+INCREMENT_SIZE];

obj=Arrays.copyOfRange(item,0, length-1);

item=obj;

capacity+=INCREMENT_SIZE;

}

}

}

6.单链表链式实现

package com.zhaochao;

import java.util.Arrays;

public class LinkListextends abstrctList 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 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 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

checkIndex(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 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;

}

}

7.测试

package com.zhaochao;

public class main {

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

// TODO Auto-generated method stub

//List ls=new LinkList();

List ls=new LinearList();

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());

}

List ll=ls.subList(2, 5);

it=ll.iterator();

while(it.hasNext()){

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

}

}

}

class Test{

public static int a=0;

public String toString(){

return String.valueOf(a++);

}

}

8.测试结果

0

1

2

3

4

5

6

7

8

9

10

11

12

13

java中顺式和链式_Java单链表顺序和链式实现(数据结构五)相关推荐

  1. 线性表的链式表示——单链表

    单链表 定义 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素.每个链表的结点,除存放元素自身的信息之外,还需要存放一个指向其后继结点的指针.即单链表的结构分为两部分, ...

  2. 【数据结构】线性表的链式存储-单链表

    单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后 ...

  3. 线性表的链式实现(单链表)

    单链表的定义 为了表示每个数据元素与其直接后续元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后续的信息,即每个结点存放本身的数据元素和下一个元素的地址.n个结点连接成一个链式线 ...

  4. java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试

    Java技巧:用匿名类来实现简化程序调试 在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle).但其实,它们对于debug也很有帮助.本文将 ...

  5. Java中的几种引用类型_Java中的几种引用类型(转载)

    Java中的对象引用主要有以下几种类型: 1)强可及对象(strongly reachable): 可以通过强引用访问的对象,一般来说,我们平时写代码的方式都是使用的强引用对象,比如下边的代码段: S ...

  6. java中容易混淆的方法_java中容易混淆的概念

    java中容易混淆的概念 1. 谈谈 final, finally, finalize 的区别final-修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不 能作为父类被 ...

  7. java中的23种设计模式_Java开发中的23种设计模式详解

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...

  8. java中不用impore导入的_java import机制(不用IDE)

    java包有两种导入机制 单类型导入 import java.lang.Object; 这个比较好理解 2. 按需类型导入 import java.lang.*; 这个不是把lang下面的所有的类都导 ...

  9. java代码实现链表_java单链表代码实现

    用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...

最新文章

  1. matlba 正交基
  2. insert into 多条数据_最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
  3. Unity学习笔记4 更换编辑器为VS2013及VS的背景图片设置
  4. 干货,springboot自定义注解实现分布式锁详解
  5. Node.js 环境下的 console.log 是同步执行的
  6. 『ACM--数据结构--字典树』信息竞赛进阶指南--Tire树
  7. Mysql实现幂等_阿里面试官:接口的幂等性怎么设计?
  8. 从零开始用好 Maven : 从 Hello World 到日常使用
  9. Commons net实现 FTP上传下载
  10. (十四)函数参数和返回值
  11. 视频教程-R语言实战之行业案例分享视频课程-其他
  12. EC Final 2019 题解
  13. elment ui 表格中输入验证
  14. 2022-2027年中国小麦加工行业市场深度分析及投资战略规划报告
  15. Windows蓝屏自动修复无法修复你的电脑
  16. 小程序毕业设计 基于微信考试小程序毕业设计开题报告功能参考
  17. 人工智能数学基础--概率与统计7:学习中一些术语的称呼或表示变化说明以及独立事件的一些补充推论
  18. 使用ADB命令卸载软件
  19. polyfit多项式拟合函数的用法
  20. k-means聚类、以及二维、三维可视化

热门文章

  1. 一天学习一点之express demo
  2. python之路day05--字典的增删改查,嵌套
  3. 多层mvc,thikphp进阶
  4. mariadb编译安装流程
  5. 百分点首席经济学家张忠解读《美国白宫大数据白皮书》
  6. tomcat7实战调优笔记
  7. javascript(1)
  8. Java从零开始学四十五(Socket编程基础)
  9. IHttpModule.Init方法被执行多次的原因
  10. android 4.0(ICS)源码下载方法