面試題:請(qǐng)自己實(shí)現(xiàn)一個(gè)Arraylist

MyIterator.java 自定義迭代器

/**
 * 自定義迭代器
 *
 */
public interface MyIterator {
    boolean hasNext();
    Object next();
}

MyArraylist.java 自己實(shí)現(xiàn)的Arraylist


import java.util.Arrays;

public class MyArraylist {
    private Object[] objs = new Object[10]; //定義數(shù)組渊抄,初始化長度是10
    private int index = 0; //數(shù)組下標(biāo)

    /**
     * 添加
     *@param o
     */
    public void add(Object o){
        if (index == objs.length){
            // 擴(kuò)容
            extend();
        }
        objs[index++] =o;
    }

    /**
     * 根據(jù)下標(biāo)獲取對(duì)象
     * @param index 下標(biāo)
     * @return
     */
    public Object get(int index){
        return objs[index];
    }

    /**
     * 計(jì)算元素個(gè)數(shù)
     * @return
     */
    public int size(){
        int size = 0;
        for (int i = 0; i < objs.length; i++) {
            if(objs[i]!=null){
                size++;
            }
        }
        return size;
    }

    /**
     * 清空
     */
    public void clear(){
        for (int i = 0; i < objs.length; i++) {
            objs[i] = null;
        }
    }

    /**
     * 判斷是否包含
     * @param o
     * @return
     */
    public boolean contains(Object o){
        for (int i = 0; i < objs.length; i++) {
            if(o!=null&&o.equals(objs[i])){
                return true;
            }
        }
        return false;
    }

    /**
     * 根據(jù)下標(biāo)刪除
     */
    public void remove(int index){
        if (index<0 || index>= this.size()){
            System.out.println("下標(biāo)無效炸客,無法刪除征绸。捏膨。捂襟。");
            throw new IndexOutOfBoundsException();
        }
        for (int i = index; i < objs.length; i++) {
            objs[i] = objs[i+1];
            if (i==this.size()){
                break;
            }
        }
    }

    /**
     * 根據(jù)對(duì)象刪除
     * @param o
     */
    public void remove(Object o){
        int index = getIndexByObject(o);
        remove(index);
    }

    /**
     * 根據(jù)對(duì)象獲取對(duì)象的下標(biāo)
     * @return
     */
    public int getIndexByObject(Object o){
        for (int i = 0; i < objs.length; i++) {
            if(o!=null&&o.equals(objs[i])){
                return i;
            }
        }
        return -1;
    }

    /**
     * 自定義迭代器
     */
    public MyIterator iterator(){
        return new Iterator();
    }

    class Iterator implements MyIterator{
        private int size = 0;
        @Override
        public boolean hasNext() {
            if(objs[size]!=null) return true;
            else return false;
        }

        @Override
        public Object next() {
            size++;
            return objs[size-1];
        }
    }




    /**
     * 擴(kuò)容
     */
    private void extend(){
        Arrays.copyOf(objs,objs.length+1);
    }


}

Test.java 測(cè)試代碼

import java.util.Arrays;

public class MyArraylist {
    private Object[] objs = new Object[10]; //定義數(shù)組扔亥,初始化長度是10
    private int index = 0; //數(shù)組下標(biāo)

    /**
     * 添加
     *@param o
     */
    public void add(Object o){
        if (index == objs.length){
            // 擴(kuò)容
            extend();
        }
        objs[index++] =o;
    }

    /**
     * 根據(jù)下標(biāo)獲取對(duì)象
     * @param index 下標(biāo)
     * @return
     */
    public Object get(int index){
        return objs[index];
    }

    /**
     * 計(jì)算元素個(gè)數(shù)
     * @return
     */
    public int size(){
        int size = 0;
        for (int i = 0; i < objs.length; i++) {
            if(objs[i]!=null){
                size++;
            }
        }
        return size;
    }

    /**
     * 清空
     */
    public void clear(){
        for (int i = 0; i < objs.length; i++) {
            objs[i] = null;
        }
    }

    /**
     * 判斷是否包含
     * @param o
     * @return
     */
    public boolean contains(Object o){
        for (int i = 0; i < objs.length; i++) {
            if(o!=null&&o.equals(objs[i])){
                return true;
            }
        }
        return false;
    }

    /**
     * 根據(jù)下標(biāo)刪除
     */
    public void remove(int index){
        if (index<0 || index>= this.size()){
            System.out.println("下標(biāo)無效柄错,無法刪除埃碱。嚎尤。荔仁。");
            throw new IndexOutOfBoundsException();
        }
        for (int i = index; i < objs.length; i++) {
            objs[i] = objs[i+1];
            if (i==this.size()){
                break;
            }
        }
    }

    /**
     * 根據(jù)對(duì)象刪除
     * @param o
     */
    public void remove(Object o){
        int index = getIndexByObject(o);
        remove(index);
    }

    /**
     * 根據(jù)對(duì)象獲取對(duì)象的下標(biāo)
     * @return
     */
    public int getIndexByObject(Object o){
        for (int i = 0; i < objs.length; i++) {
            if(o!=null&&o.equals(objs[i])){
                return i;
            }
        }
        return -1;
    }

    /**
     * 自定義迭代器
     */
    public MyIterator iterator(){
        return new Iterator();
    }

    class Iterator implements MyIterator{
        private int size = 0;
        @Override
        public boolean hasNext() {
            if(objs[size]!=null) return true;
            else return false;
        }

        @Override
        public Object next() {
            size++;
            return objs[size-1];
        }
    }




    /**
     * 擴(kuò)容
     */
    private void extend(){
        Arrays.copyOf(objs,objs.length+1);
    }


}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芽死,隨后出現(xiàn)的幾起案子乏梁,更是在濱河造成了極大的恐慌,老刑警劉巖关贵,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遇骑,死亡現(xiàn)場離奇詭異,居然都是意外死亡揖曾,警方通過查閱死者的電腦和手機(jī)落萎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炭剪,“玉大人练链,你說我怎么就攤上這事∧罴溃” “怎么了兑宇?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我隶糕,道長瓷产,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任枚驻,我火速辦了婚禮濒旦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘再登。我一直安慰自己尔邓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布锉矢。 她就那樣靜靜地躺著梯嗽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沽损。 梳的紋絲不亂的頭發(fā)上灯节,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音绵估,去河邊找鬼炎疆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛国裳,可吹牛的內(nèi)容都是我干的形入。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼缝左,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼亿遂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渺杉,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤崩掘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后少办,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡诵原,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年英妓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绍赛。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔓纠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吗蚌,到底是詐尸還是另有隱情腿倚,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布蚯妇,位于F島的核電站敷燎,受9級(jí)特大地震影響暂筝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硬贯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一焕襟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饭豹,春花似錦鸵赖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翘悉,卻和暖如春茫打,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镐确。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工包吝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人源葫。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓诗越,卻偏偏與公主長得像,于是被迫代替她去往敵國和親息堂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚷狞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)荣堰,斷路器床未,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法振坚,內(nèi)部類的語法薇搁,繼承相關(guān)的語法,異常的語法渡八,線程的語...
    子非魚_t_閱讀 31,597評(píng)論 18 399
  • 我不知道地鐵夾縫中生存的是什么 我不知道地鐵前進(jìn)方向的黑暗是什么 我只知道我們?cè)诘罔F中安逸享樂
    星火燦爛閱讀 184評(píng)論 0 0
  • 前端菜雞記錄自己的node.js學(xué)習(xí)之路啃洋,與大家共勉 1.從HelloWorld寫起 node test輸出hel...
    zkhChris閱讀 439評(píng)論 0 6
  • 今天趁著周末帶孩子一起去看望了前兩天因?yàn)橹囟确窝滓鸩l(fā)癥住院的朋友。得到了一個(gè)好消息屎鳍,他從重度昏迷狀態(tài)宏娄,...
    蘇會(huì)ls閱讀 51評(píng)論 0 1