java链式结构_(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;
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语言链式结构实现(数据结构四)相关推荐
- java stack (null -1)_关于单链表实现的一个stack的问题
背景:菜鸟一枚,想补补基础.最近在看算法 ,1.3.26有一道题是:编写一个方法remove()接受一条链表和一个字符串key作为参数,删除链表中所有的item域为key的节点. 上代码: publi ...
- 浅谈:数据结构之单链表,java代码演示单链表
单链表 本文是观看尚硅谷韩老师视频学习总结,部分来源网络. 单链表介绍 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...
- java不带头结点单链表,java带头结点的单链表
JAVA 循环双链表的建立 import java.util.Scanner; //循环双向链表的结点类 class DuLNode { private Object data;// 存放结点值 前驱 ...
- 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)
目录 一.链表(链式存储结构)的特点 二.单链表的定义和表示 1.带头结点的单链表 2.单链表的存储结构 三.单链表基本操作的实现 1.单链表的初始化(带头结点的单链表) 2.补充单链表的几个常用简单 ...
- c语言实现可变单链表,c语言实现单链表
c语言实现单链表 c语言实现单链表 定义 创建 销毁 清空 打印 获取长度 查询 删除第pos个结点 在第pos插入结点 定义 首先来看一看单链表的定义(看看百度的) 单链表是一种链式存取的数据结构, ...
- Linux结构体变量报错,C语言中的结构体
用户自己建立自己的结构体类型 1. 定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...
- java中顺式和链式_Java单链表顺序和链式实现(数据结构五)
1.迭代器实现 package com.zhaochao; public interface Iterator { boolean hasNext(); E next(); boolean delet ...
- java单链表节点翻转_单链表Java实现
链表中的结点是以结点来表示,单链表每一个结点有一个指针域和data域,物理位置不是连续的,逻辑上是连续的. 代码实现 class LinkedList<E> {private Node ...
- Java实现单链表、栈、队列三种数据结构
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:远航 cnblogs.com/yang-guang- ...
最新文章
- 基于路由器网络诊断步骤和故障排除技巧
- CentOS7关闭防火墙方法
- OpenSSH修改版本号教程
- rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇
- 大数据成长之路:谈谈那些必须学习的Linux基础知识
- 飞书×帆软数知鸟 | 飞书上的一站式需求管理
- VB.Command()的参数
- C++ 简单实现unorderset和unordermap
- 表贴电阻尺寸与什么有关_贴片电阻常见的规格封装和尺寸
- GO及其LiteIDE踩坑
- Docker - Dockerfile之FROM、ARG、LABEL、MAINTAINER、RUN、CMD指令详解
- 选择ip代理软件要看那几点?
- linux 程序开发
- IAR 配置ICF跟项目走
- 云服务器 虚拟主机 故障,云虚拟主机重启服务器
- IT人士获得老板青睐器重的五大秘决
- 语音识别数据增强方法(google2019年7月论文)
- STM32驱动OV7725摄像头颜色识别
- realsense环境搭建
- html页面跳转href过渡效果,页面锚链接平滑动画过渡纯JS插件