国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯

這篇具有很好參考價值的文章主要介紹了JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

?作者簡介:大家好,我是橘橙黃又青,一個想要與大家共同進(jìn)步的男人????

??個人主頁:再無B~U~G-CSDN博客

目標(biāo):
1. 什么是 List
2. List 常見接口介紹
3. List 的使用
本章主要學(xué)習(xí)順序表底層邏輯,大致是一樣的,不差多少。

?1. 什么是List

在集合框架中,List是一個接口,繼承自Collection

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

Collection也是一個接口,該接口中規(guī)范了后序容器中常用的一些方法,具體如下所示:?

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

Iterable 也是一個接口,表示實現(xiàn)該接口的類是可以逐個元素進(jìn)行遍歷的,具體如下:
JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

List 的官方文檔 ?

站在數(shù)據(jù)結(jié)構(gòu)的角度來看, List 就是一個線性表,即 n 個具有相同類型元素的有限序列,在該序列上可以執(zhí)行增刪 改查以及變量等操作 。
面試題 Collection 中有那些方法?

2. 常見接口介紹

?List中提供了好的方法,具體如下:

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

雖然方法比較多,但是常用方法如下:
方法
解釋
boolean add (E e)
尾插 e
void add (int index, E element)
e 插入到 index 位置
boolean addAll (Collection<? extends E> c)
尾插 c 中的元素
E remove (int index)
刪除 index 位置元素
boolean remove (Object o)
刪除遇到的第一個 o
E get (int index)
獲取下標(biāo) index 位置元素
E set (int index, E element)
將下標(biāo) index 位置元素設(shè)置為 element
void clear ()
清空
boolean contains (Object o)
判斷 o 是否在線性表中
int indexOf (Object o)
返回第一個 o 所在下標(biāo)
int lastIndexOf (Object o)
返回最后一個 o 的下標(biāo)
List<E> subList (int fromIndex, int toIndex)
截取部分 list

3.簡單實現(xiàn)List順序表的底層邏輯

目的:為了更加清楚的了解順序表的使用

相應(yīng)的級別關(guān)系:

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

把所有的順序表方法都定義在IList接口:

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

這里不帶多講,結(jié)構(gòu)上跟c語言差不多。

我們說一下異常這一塊:

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

梳理一下異常的應(yīng)用,比如說:

JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯,java數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)

實現(xiàn)代碼:

相應(yīng)的解釋代碼里面都有:

?src/arrayList/IList接口

package arrayList;

public interface IList {
    // 新增元素,默認(rèn)在數(shù)組最后新增
    void add(int data);

    // 在 pos 位置新增元素
    void add(int pos, int data);

    // 判定是否包含某個元素
    boolean contains(int toFind);

    // 查找某個元素對應(yīng)的位置
    int indexOf(int toFind);

    // 獲取 pos 位置的元素
    int get(int pos);

    // 給 pos 位置的元素設(shè)為 value -> 更新
    void set(int pos, int value);

    //刪除第一次出現(xiàn)的關(guān)鍵字key
    void remove(int toRemove);

    // 獲取順序表長度
    int size();

    // 清空順序表
    void clear();

    // 打印順序表,
    // 注意:該方法并不是順序表中的方法,為了方便看測試結(jié)果給出的
    void display();
}

src/arrayList/MyArrayList類

package arrayList;

import java.util.Arrays;

public class MyArrayList implements IList {

    public int[] elem;
    public int usedSize;

    //調(diào)用構(gòu)造方法,初始化順序表長度
    public MyArrayList() {
        this.elem = new int[2];
    }
    //判斷順序表滿不滿
    public boolean isFull() {
        return elem.length == usedSize;
    }

    //添加一個元素
    @Override
    public void add(int data) {
        if (isFull()) {
            elem = Arrays.copyOf(elem, 2 * elem.length);
        }
        this.elem[usedSize] = data;
        this.usedSize++;
    }


    //該方法來 判斷 添加元素時 pos是否合法
    private void checkPosOfAdd(int pos) throws PosNotLegalException {
        if (pos < 0 || pos > usedSize) {
            throw new PosNotLegalException("pos位置不合法!");
        }
    }

    // 在 pos 下標(biāo)位置新增元素
    @Override
    public void add(int pos, int data) {
        //判斷是不是正確引用
        try {
            checkPosOfAdd(pos);
        } catch (PosNotLegalException e) {
            e.printStackTrace();
        }
        if (isFull()) {
            //擴容
            elem = Arrays.copyOf(elem, 2 * elem.length);
        }
        //移動元素
        for (int i = usedSize - 1; i >= pos; i--) {
            elem[i + 1] = elem[i];
        }
        //插入元素
        this.elem[pos] = data;
        this.usedSize++;
    }

    //判斷順序表是否有改元素
    @Override
    public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (this.elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }

    //查找某個元素對應(yīng)的下標(biāo)位置
    @Override
    public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (this.elem[i] == toFind) {
                return i;
            }
        }
        return -1;
    }

    //判斷pos位置是否合法
    private void checkPosOfGetAndSet(int pos) throws PosNotLegalException{
        if(pos < 0 || pos >= usedSize) {
            throw new PosNotLegalException("get/set獲取元素的時候" +
                    "pos位置不合法!");
        }
    }
    // 獲取 pos 位置的元素
    @Override
    public int get(int pos) {
        //判斷pos位置是否合法
        try {
            checkPosOfGetAndSet(pos);
        }catch (ClassCastException e){
            e.printStackTrace();
        }
        return this.elem[pos];
    }

    // 給 pos 位置的元素設(shè)為 value -> 更新
    @Override
    public void set(int pos, int value) {
        //判斷pos位置是否合法
        try {
            checkPosOfGetAndSet(pos);
        }catch (ClassCastException e){
            e.printStackTrace();
        }
        this.elem[pos] = value;
    }

    //刪除第一次出現(xiàn)的關(guān)鍵字key
    @Override
    public void remove(int toRemove) {
        //1、要查找是否存在要刪除的關(guān)鍵字 toRemove
        int pos = indexOf(toRemove);
        if(pos == -1) {
            System.out.println("沒有要刪除的數(shù)字!");
            return;
        }
        for (int i = pos; i < usedSize-1; i++) {
            elem[i] = elem[i+1];
        }
        usedSize--;
    }

    //返回數(shù)據(jù)長度
    @Override
    public int size() {
        return this.usedSize;
    }

    //釋放順序表
    @Override
    public void clear() {
        this.elem = null;
        this.usedSize = 0;
    }
    //打印順序表
    @Override
    public void display() {
        System.out.print("[ ");
        for (int i = 0; i < usedSize; i++) {
            System.out.print(elem[i] + " ");

        }
        System.out.println("]");
    }
}

src/arrayList/PosNotLegalException類

package arrayList;

public class PosNotLegalException extends RuntimeException{
    //不帶參數(shù)的構(gòu)造方法
    public PosNotLegalException() {

    }
    //帶參數(shù)的構(gòu)造方法
    public PosNotLegalException(String msg) {
        super(msg);
    }

}


src/arrayList/Test測試類

package arrayList;

public class Test {
    public static void main(String[] args) {
        MyArrayList list = new MyArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);

//        list.add(1,24);
//        boolean temp = list.contains(24);
//        if(temp){
//            System.out.println("有");
//        }else{
//            System.out.println("沒有");
//        }
        // 打印鏈表
        list.display();
//        int is =list.indexOf(2);
//        if (is >= 0) {
//            System.out.println("有,在下標(biāo):" + is);
//        } else {
//            System.out.println("沒有");
//        }

        // 獲取 pos 位置的元素
//        int a = list.get(3);
//        System.out.println(a);
//        list.set(2, 6);
//        System.out.println(a);
        list.remove(3);
        // 打印鏈表
        list.display();

    }
}

今天就到這里了,感謝觀看。文章來源地址http://www.zghlxwxcb.cn/news/detail-861774.html

到了這里,關(guān)于JAVASE->數(shù)據(jù)結(jié)構(gòu)|順序表底層邏輯的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包