日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2025/3/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java链式结构_(Java)单链表Java语言链式结构实现(数据结构四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。