五田炭、Java數(shù)據(jù)結(jié)構(gòu)-順序表(SequenceList)

什么是順序表

順序表是在計算機內(nèi)存中以數(shù)組的形式保存的線性表授瘦,線性表的順序存儲是指用一組地址連續(xù)的存儲單元近她,依次存儲線性表中的各個元素叉瘩、使得線性表中再邏輯結(jié)構(gòu)上響鈴的數(shù)據(jù)元素存儲在相鄰的物理存儲單元中,即通過數(shù)據(jù)元素物理存儲的相鄰關(guān)系來反映數(shù)據(jù)元素之間邏輯上的相鄰關(guān)系粘捎;
常見的如數(shù)組:


在Java中順序表一般體現(xiàn)為兩種 數(shù)組 與 集合薇缅,數(shù)組是固定長度的順序表,集合是動態(tài)長度的順序表晌端,這里實現(xiàn)動態(tài)長度的順序表捅暴;

順序表的實現(xiàn)(直接上代碼)

類名 SequenceList
成員方法 1.public void clear():清空順序表
2.publicboolean isEmpty():判斷順序表是否為空,是返回true咧纠,否返回false
3.public int length():獲取順序表中元素的個數(shù)
4.public T get(int i):讀取并返回順序表中的第i個元素的值
5.public void insert(T t):往順序表中添加一個元素蓬痒;
6.public void insert(int i,T t):在順序表的第i個元素之前插入一個值為t的數(shù)據(jù)元素。
7.public T remove(int i):刪除并返回順序表中第i個數(shù)據(jù)元素漆羔。
8.public int indexOf(T t):返回順序表中首次出現(xiàn)的指定的數(shù)據(jù)元素的位序號梧奢,若不存在狱掂,則返回-1
成員變量 1.private T [] eles:存儲元素的數(shù)組
2.private int N:記錄順序表的長度
3. private int modCount : 記錄順序表的操作次數(shù)

public class SequenceList<T>  implements Iterable<T>{
    private  T[] eles;
    private int N;
    private int modCount;
    public SequenceList(){
//        this.eles =(T[]) new Object[1];
        this.N = 0;
    }
    public void clear(){
        modCount ++;
        for (int i = 0;i<this.N;i++) {
            eles[i] = null;
        }
        this.N = 0;
    }
    public boolean isEmpty(){
        return this.N==0;
    }
    public int length(){
        return this.N;
    }

    public T get(int index){
        if(index<0 || index>this.N){
            System.out.println("異常");
            return null;
        }
        return  this.eles[index];
    }

    public void insert(T t){
        this.modCount++;
        ensureCapacityInternal(this.N+1);
        this.eles[this.N++] = t;
    }

    public void insert(int index,T t){
        this.modCount++;
        if(index<0|| index>this.N){
            System.out.println("異常");
            return;
        }
        ensureCapacityInternal(this.N+1);
        for (int i = this.N; i>index; i--) {
            this.eles[i]= this.eles[i-1];
        }
        this.eles[this.N++] = t;
    }
    public T remove(int index){
        this.modCount++;
        if(index<=0|| index>this.N){
            System.out.println("異常");
            return null;
        }
        T t = eles[index];
        for (int i = index; i<this.N-1; i++) {
            this.eles[i]= this.eles[i+1];
        }
        ensureCapacityInternal(--this.N);
        return t;
    }

    private void ensureCapacityInternal(int minCapacity){
        if(this.N == 0){
            this.eles =  (T []) new Object[minCapacity];
        }else{
            T[] temp =  (T []) new Object[minCapacity];
            int num = minCapacity;
            if(num >this.eles.length){
                num =this.eles.length;
            }
            System.arraycopy(this.eles,0,temp,0,num);
            this.eles = temp;
        }

    }
    public int indexOf(T t){
        for (int i = 0; i < this.N; i++) {
            if(this.eles[i].equals(t)){
                return i;
            }
        }
        return -1;
    }

    @Override
    public Iterator<T> iterator() {
        return new MyIterator();
    }
    private  class MyIterator implements Iterator<T>{
        private  int cur ;
        private  int num;
        public MyIterator(){
            this.cur = 0;
            this.num = modCount;
        }
        @Override
        public boolean hasNext() {
            checkModCount();
            return cur< N;
        }

        @Override
        public T next() {
            checkModCount();
            return eles[cur++];
        }
        private void checkModCount(){
            if(this.num != modCount){
                throw new RuntimeException("不合法的操作,在遍歷元素時修改數(shù)據(jù)是不安全的亲轨!");
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趋惨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惦蚊,更是在濱河造成了極大的恐慌器虾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹦锋,死亡現(xiàn)場離奇詭異兆沙,居然都是意外死亡,警方通過查閱死者的電腦和手機莉掂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門葛圃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憎妙,你說我怎么就攤上這事库正。” “怎么了厘唾?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵褥符,是天一觀的道長。 經(jīng)常有香客問我阅嘶,道長属瓣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任讯柔,我火速辦了婚禮抡蛙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魂迄。我一直安慰自己粗截,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布捣炬。 她就那樣靜靜地躺著熊昌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪湿酸。 梳的紋絲不亂的頭發(fā)上婿屹,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音推溃,去河邊找鬼昂利。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜂奸。 我是一名探鬼主播犁苏,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扩所!你這毒婦竟也來了围详?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祖屏,失蹤者是張志新(化名)和其女友劉穎助赞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袁勺,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡嫉拐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁兼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡漠嵌,死狀恐怖咐汞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情儒鹿,我是刑警寧澤化撕,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站约炎,受9級特大地震影響植阴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜圾浅,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一掠手、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狸捕,春花似錦喷鸽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸡岗,卻和暖如春混槐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背轩性。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工声登, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓捌刮,卻偏偏與公主長得像碰煌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绅作,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容