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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArrayList 和 LinkedList 的自定义实现

發(fā)布時間:2025/6/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArrayList 和 LinkedList 的自定义实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、ArrayList
  • 二、LinkedList
  • 總結(jié)


前言

??????下面給出 ArrayList 和 LinkedList 的自定義實現(xiàn),僅作為練習(xí)。

一、ArrayList

??????自己仿照著寫一個 SimpleArrayList 實現(xiàn)類,代碼也比較簡單,故不做說明了,其中 SimpleItr 內(nèi)部類實現(xiàn)了 Iterator 接口。如下:

public class SimpleArrayList<T> implements Iterable<T> {private static final int DEFAULT_CAPACITY=10;private int capacity=DEFAULT_CAPACITY;private int Size;private T[] Items;public SimpleArrayList(){doClear();}public void clear(){doClear();}private void doClear(){Size=0;ensureCapacity(DEFAULT_CAPACITY);}public int size(){return Size;}public boolean isEmpty(){return size()==0;}public void trimToSize(){ensureCapacity(size());}public T get(int idx){if(idx<0||idx>=size())throw new ArrayIndexOutOfBoundsException();return Items[idx];}public void set(int idx,T newValue){if(idx<0||idx>=size())throw new ArrayIndexOutOfBoundsException();Items[idx]=newValue;}public void ensureCapacity(int newCapacity){if(newCapacity<Size)return;T[] old=Items;Items=(T[])new Object[newCapacity];for(int i=0;i<size();i++)Items[i]=old[i];}public void add(T x){add(size(),x);}public void add(int idx,T x){if(Items.length==size())//Items.length為數(shù)組容量ensureCapacity(size()*2+1);// +1 是為了避免數(shù)組為空時無法添加元素for(int i=size()-1;i>idx;i--)Items[i]=Items[i-1];Items[idx]=x;Size+=1;}public void remove(int idx){if(idx<0||idx>=size())throw new ArrayIndexOutOfBoundsException();for(int i=idx;i<size()-1;i++)Items[i]=Items[i+1];Size-=1;}public Iterator<T> iterator(){return new SimpleItr();}private class SimpleItr implements Iterator<T>{//內(nèi)部類private int current=0;//當(dāng)前位置(從0開始)public boolean hasNext(){return current<size();}public T next(){if(!hasNext())throw new NoSuchElementException();return Items[current++];}public void remove(){SimpleArrayList.this.remove(--current);}}}

二、LinkedList

??????LinkedList 內(nèi)部采用雙鏈表來實現(xiàn),如果操作發(fā)生在已知的情況下(端點或由迭代器指定的位置上),從而保證每個操作花費常數(shù)時間。

??????1,SimpleLinkedList 類,包含雙鏈表和一些方法。
??????2,Node 靜態(tài)內(nèi)部類。實現(xiàn)鏈表中的節(jié)點。
??????3,SimpleItr 內(nèi)部類。實現(xiàn)了 Iterator 接口。

public class SimpleLinkedList<T> implements Iterable<T> {private static class Node<T>{//Node 靜態(tài)內(nèi)部類(改為非靜態(tài)內(nèi)部類也可以)public T value;public Node<T> pre;public Node<T> next;public Node(T value,Node<T> pre,Node<T> next){this.value=value;this.pre=pre;this.next=next;}}private int size;private Node<T> header,tail;//頭尾節(jié)點public SimpleLinkedList(){doClear();}public void clear(){doClear();}private void doClear(){header=new Node<T>(null,null,null);tail=new Node<T>(null,header,null);header.next=tail;size=0;}public int size(){return size;}public boolean isEmpty(){return size()==0;}//get 和 set 方法。private Node<T> getNode(int idx){ //工具方法,稍微加快了搜索效率。Node<T> tmp;if(idx<0||idx>=size()){throw new IndexOutOfBoundsException();}if(idx<size()/2){tmp=header.next;for(int i=0;i<idx;i++)tmp=tmp.next;}else{tmp=tail.pre;for(int i=size()-1;i>idx;i--)tmp=tmp.pre;}return tmp;}public T get(int idx){return getNode(idx).value;}public void set(int idx,T ele){Node<T> tmp=getNode(idx);tmp.value=ele;}//add 和 remove 方法。public void add(T x){//尾插法Node<T> newPre=tail.pre;Node<T> tmp=new Node<>(x,newPre,tail);tail.pre=tmp;newPre.next=tmp;size++;}public void add(int idx,T x){Node<T> oldNode=getNode(idx);Node<T> newPre=oldNode.pre;Node<T> tmp=new Node<>(x,newPre,oldNode);newPre.next=tmp;oldNode.pre=tmp;size++;}public void remove(int idx){Node<T> node=getNode(idx);Node<T> pre=node.pre;Node<T> next=node.next;pre.next=next;next.pre=pre;size--;}//iterator 方法。public Iterator<T> iterator(){return new SimpleItr();}private class SimpleItr implements Iterator<T>{private Node<T> current=header.next;private boolean okToRemove=false;public boolean hasNext(){return current!=tail;}public T next(){if(!hasNext())throw new NoSuchElementException();T nextItem=current.value;current=current.next;okToRemove=true;return nextItem;}public void remove(){if(!okToRemove)throw new IllegalStateException();Node<T> currentTmp=current.pre;currentTmp.pre.next=current;current.pre=currentTmp.pre;okToRemove=false;}} }

總結(jié)

??????完。

總結(jié)

以上是生活随笔為你收集整理的ArrayList 和 LinkedList 的自定义实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩黄色视屏 | xiuxiuavnet| 一级一片免费看 | 中日韩在线观看 | 亚洲欧美日韩系列 | 澳门免费av | 亚色影库 | 不卡在线一区 | 在线欧美色 | 日韩精品一区二区三区不卡在线 | 草久久免费视频 | 五月婷婷视频在线观看 | 免费观看成人毛片 | 久久精品久久国产 | 亚洲一区中文字幕 | 国产黄色大片免费看 | 欧美日韩精品免费 | 久久久美女视频 | 2021国产在线视频 | 伊人综合影院 | 美女黄色av | 在线不卡av | 久久888 | 亚洲丝袜在线视频 | 国产卡一卡二卡三无线乱码新区 | 无毒黄色网址 | 欧美一区二区在线视频观看 | 国产欧美日韩专区发布 | 无套内谢少妇高潮免费 | 国产卡一卡二卡三无线乱码新区 | 在线观看黄色小视频 | 日韩中文字幕一区二区三区 | 激情视频免费在线观看 | 亚洲天堂久久久久 | 九草视频在线 | 亚洲综合视频在线观看 | 国产一区二区三区四区三区四 | 大尺度av在线 | 2025国产精品 | www.国产在线视频 | 教练含着她的乳奶揉搓揉捏动态图 | 青青视频网 | a视频免费 | 手机av观看 | 黄免费在线观看 | 五月天开心网 | 午夜片在线观看 | 亚洲男人天堂网站 | japan高清日本乱xxxxx | 那个网站可以看毛片 | 国产成人精品一区二区无码呦 | 久久精品99久久久久久 | 欧美13p| 少妇高潮露脸国语对白 | 国产国语老龄妇女a片 | 国产成a人亚洲精v品在线观看 | 日韩av影片在线观看 | 成人免费小视频 | 国产精品午夜福利视频234区 | 欧美激情精品久久久久久蜜臀 | 特黄aaaaaaa片免费视频 | 日韩女优在线观看 | 欧美插插视频 | 伊人免费| 亚洲午夜久久久久久久久 | 国产激情视频一区 | 国产无遮挡18禁无码网站不卡 | 亚洲AV无码精品一区二区三区 | 日韩一区二区免费播放 | 欧美激情偷拍 | 天堂网ww| 人体内射精一区二区三区 | 欧美三根一起进三p | 日韩一级欧美一级 | 亚洲第一页中文字幕 | 免费看黄色的网址 | 亚洲看 | 一本色道久久88综合无码 | 黄色片视频在线观看 | 色综合区 | 成人免费看片入口 | 久操久 | 色淫湿视频 | 狠狠操五月天 | 伊人资源 | 中文字幕亚洲精品在线 | 国产高清视频 | 久久久午夜精品福利内容 | 久久加久久| 国产羞羞 | www.欧美一区二区三区 | 日本免费精品视频 | 九九热在线视频免费观看 | 日本精品久久 | 成人a毛片久久免费播放 | a毛片视频 | 久久久久无码国产精品一区 | 男人插入女人下面的视频 | 伦乱天堂 |