java中顺式和链式_Java单链表顺序和链式实现(数据结构五)
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单链表顺序和链式实现(数据结构五)相关推荐
- 线性表的链式表示——单链表
单链表 定义 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素.每个链表的结点,除存放元素自身的信息之外,还需要存放一个指向其后继结点的指针.即单链表的结构分为两部分, ...
- 【数据结构】线性表的链式存储-单链表
单链表的定义 线性表的链式存储又称为单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 为了建立起数据元素之间的线性关系,对每个链表结点,除了存放元素自身的信息之外,还需要存放一个指向其后 ...
- 线性表的链式实现(单链表)
单链表的定义 为了表示每个数据元素与其直接后续元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后续的信息,即每个结点存放本身的数据元素和下一个元素的地址.n个结点连接成一个链式线 ...
- java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试
Java技巧:用匿名类来实现简化程序调试 在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle).但其实,它们对于debug也很有帮助.本文将 ...
- Java中的几种引用类型_Java中的几种引用类型(转载)
Java中的对象引用主要有以下几种类型: 1)强可及对象(strongly reachable): 可以通过强引用访问的对象,一般来说,我们平时写代码的方式都是使用的强引用对象,比如下边的代码段: S ...
- java中容易混淆的方法_java中容易混淆的概念
java中容易混淆的概念 1. 谈谈 final, finally, finalize 的区别final-修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不 能作为父类被 ...
- java中的23种设计模式_Java开发中的23种设计模式详解
所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. [J ...
- java中不用impore导入的_java import机制(不用IDE)
java包有两种导入机制 单类型导入 import java.lang.Object; 这个比较好理解 2. 按需类型导入 import java.lang.*; 这个不是把lang下面的所有的类都导 ...
- java代码实现链表_java单链表代码实现
用惯了C++,java写起来果然不太爽...不废话了,上代码... package javaInnerclassDemo; class Link{ class Node{ private String ...
最新文章
- matlba 正交基
- insert into 多条数据_最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
- Unity学习笔记4 更换编辑器为VS2013及VS的背景图片设置
- 干货,springboot自定义注解实现分布式锁详解
- Node.js 环境下的 console.log 是同步执行的
- 『ACM--数据结构--字典树』信息竞赛进阶指南--Tire树
- Mysql实现幂等_阿里面试官:接口的幂等性怎么设计?
- 从零开始用好 Maven : 从 Hello World 到日常使用
- Commons net实现 FTP上传下载
- (十四)函数参数和返回值
- 视频教程-R语言实战之行业案例分享视频课程-其他
- EC Final 2019 题解
- elment ui 表格中输入验证
- 2022-2027年中国小麦加工行业市场深度分析及投资战略规划报告
- Windows蓝屏自动修复无法修复你的电脑
- 小程序毕业设计 基于微信考试小程序毕业设计开题报告功能参考
- 人工智能数学基础--概率与统计7:学习中一些术语的称呼或表示变化说明以及独立事件的一些补充推论
- 使用ADB命令卸载软件
- polyfit多项式拟合函数的用法
- k-means聚类、以及二维、三维可视化