最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):線性表

 更新時(shí)間:2021年07月27日 15:25:25   作者:魚小洲  
這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來幫助

前言

其實(shí)線性表在生活中和棧的結(jié)構(gòu)差不多。昨天總結(jié)了一篇單鏈表,也是線性表的一種。

今天用另一種寫法來控制指針的移動(dòng)實(shí)現(xiàn)數(shù)據(jù)的順序存儲(chǔ)結(jié)構(gòu)。

需求分析

首先要明確,這種順序存儲(chǔ)結(jié)構(gòu)的線性表底層用什么。根據(jù)之前查看過的源碼來看,list一般都是以數(shù)組為底層。我們也不例外。

其次,我們還得去定義好線性表的長(zhǎng)度,以及每個(gè)元素的指針。

private Object[] arr; // 底層的結(jié)構(gòu)
private int index = -1; // 代表元素的索引位置
private int size; // 當(dāng)前線性表的長(zhǎng)度
private int LinearListLength = 4; // 線性表的默認(rèn)長(zhǎng)度

我們這兒只演示添加、刪除、獲取指定位置、獲取全部以及判斷是否為空這五種形式。

編碼

add方法

add方法為向線性表中添加元素,需要傳入一個(gè)泛型參數(shù)。實(shí)現(xiàn)思路是讓index+1然后把index賦值給數(shù)組得到索引區(qū)域,再讓size+1

總體設(shè)計(jì)比較簡(jiǎn)單,看代碼。

public E add(E item) {
        // 先初始化線性表
        capacity();
        // 初始化完成后先把index指針后移一位,也就是+1
        // 后移一位之后將要添加的元素賦值到數(shù)組中
        this.arr[++index] = item;
        System.out.println(index);
        // 添加完成后長(zhǎng)度+1
        this.size++;
        return item;
    }

getIndex方法

getIndex方法主要是用來獲取指定位置的元素,這個(gè)就很簡(jiǎn)單了,因?yàn)榈讓邮菙?shù)組,所以我們可以直接用數(shù)組的索引去獲取。

public E getIndex(int index) {
        return (E) this.arr[index];
    }

pop方法

pop方法作用是刪除指定位置的元素。需要傳入一個(gè)int類型的索引。由于特殊性,我們必須得借用上面的獲取指定位置的元素的方法來實(shí)現(xiàn)這一步驟。

在元素刪除后,通過遍歷循環(huán)去將index位置向前移動(dòng)一位。具體代碼如下:

/**
 * 刪除指定位置的元素
 */
public E pop(int index) {
    E e = getIndex(index);
    if (e != null) {
        for (int i = index; i < size; i++) {
            arr[i] = arr[i + 1];
        }
        this.size--;
        return e;
    } else {
        return null;
    }
}

insert方法

insert方法需要傳入兩個(gè)參數(shù),一個(gè)int類型的索引值,一個(gè)泛型數(shù)據(jù)。在指定位置插入該泛型值,然后將后面的值全部后移一位。

public E insert(int index, E item) {
        System.out.println(size);
        for (int i = index; i < size; i++) {
            arr[i + 1] = arr[i];
        }
        arr[index] = item;
        this.size++;
        return item;
    }

getAll

這個(gè)方法不用我多說了,一個(gè)簡(jiǎn)單的遍歷循環(huán)

public void getAll() {
        for (Object o : this.arr) {
            System.out.println(o);
        }
    }

這兒遍歷的Object類型會(huì)自動(dòng)轉(zhuǎn)化成添加元素時(shí)的類型

全部代碼

package com.zxy.xianxingbiao;
/**
 * @Author Zxy
 * @Date 2021/2/4 16:54
 * @Version 1.0
 */
import java.util.Arrays;
/**
 * 演示線性表的使用  底層使用數(shù)組
 */
public class MyLinearList<E> {
    private Object[] arr; // 底層的結(jié)構(gòu)
    private int index = -1; // 代表元素的索引位置
    private int size; // 當(dāng)前線性表的長(zhǎng)度
    private int LinearListLength = 4; // 線性表的默認(rèn)長(zhǎng)度
    /**
     * 判斷線性表是否為空
     */
    public boolean empty() {
        return this.size == 0 ? true : false;
    }
    /**
     * 給線性表中添加元素
     */
    public E add(E item) {
        // 先初始化線性表
        capacity();
        // 初始化完成后先把index指針后移一位,也就是+1
        // 后移一位之后將要添加的元素賦值到數(shù)組中
        this.arr[++index] = item;
        System.out.println(index);
        // 添加完成后長(zhǎng)度+1
        this.size++;
        return item;
    }
    /**
     * 在指定位置插入元素
     */
    public E insert(int index, E item) {
        System.out.println(size);
        for (int i = index; i < size; i++) {
            arr[i + 1] = arr[i];
        }
        arr[index] = item;
        this.size++;
        return item;
    }
    /**
     * 獲取指定位置的元素
     */
    public E getIndex(int index) {
        return (E) this.arr[index];
    }
    /**
     * 刪除指定位置的元素
     */
    public E pop(int index) {
        E e = getIndex(index);
        if (e != null) {
            for (int i = index; i < size; i++) {
                arr[i] = arr[i + 1];
            }
            this.size--;
            return e;
        } else {
            return null;
        }
    }
    /**
     * 獲取全部的元素
     */
    public void getAll() {
        for (Object o : this.arr) {
            System.out.println(o);
        }
    }
    /**
     * 數(shù)組初始化或者以1.5倍容量對(duì)數(shù)組擴(kuò)容
     */
    private void capacity() {
        // 數(shù)組初始化
        if (this.arr == null) {
            this.arr = new Object[this.LinearListLength];
        }
        // 以1.5倍對(duì)數(shù)組擴(kuò)容
        if (this.size - (this.LinearListLength - 1) >= 0) { // 如果當(dāng)前數(shù)組的元素個(gè)數(shù)大于了當(dāng)前數(shù)組的最后一個(gè)索引值
            this.LinearListLength = this.LinearListLength + (this.LinearListLength >> 1); // 位運(yùn)算,讓長(zhǎng)度變成原來的1/2
            this.arr = Arrays.copyOf(this.arr, this.LinearListLength); // 復(fù)制一個(gè)新的數(shù)組,用新開辟的長(zhǎng)度
        }
    }
    public static void main(String[] args) {
        MyLinearList<String> list = new MyLinearList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list.getIndex(1));
        list.pop(1);
        System.out.println(list.getIndex(1));
        list.getAll();
    }
}

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 關(guān)于maven:pom文件的使用解析

    關(guān)于maven:pom文件的使用解析

    這篇文章主要介紹了關(guān)于maven:pom文件的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • logback配置中變量和include的應(yīng)用方式

    logback配置中變量和include的應(yīng)用方式

    這篇文章主要介紹了logback配置中變量和include的應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringDataRedis簡(jiǎn)單使用示例代碼

    SpringDataRedis簡(jiǎn)單使用示例代碼

    這篇文章主要介紹了SpringDataRedis簡(jiǎn)單使用,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • maven deploy時(shí)報(bào)錯(cuò)的解決方法

    maven deploy時(shí)報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了maven deploy時(shí)報(bào)錯(cuò)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot啟動(dòng)時(shí)加載指定方法的方式小結(jié)

    SpringBoot啟動(dòng)時(shí)加載指定方法的方式小結(jié)

    本文主要給大家介紹了Spring Boot項(xiàng)目啟動(dòng)時(shí)加載指定方法都有哪些方式的,文中給大家介紹了五種常用的方式,有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java Builder模式構(gòu)建MAP/LIST的實(shí)例講解

    Java Builder模式構(gòu)建MAP/LIST的實(shí)例講解

    下面小編就為大家?guī)硪黄狫ava Builder模式構(gòu)建MAP/LIST的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • SpringBoot2.x 參數(shù)校驗(yàn)問題小結(jié)

    SpringBoot2.x 參數(shù)校驗(yàn)問題小結(jié)

    這篇文章主要介紹了SpringBoot2.x 參數(shù)校驗(yàn)一些問題總結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 如何基于java語言實(shí)現(xiàn)八皇后問題

    如何基于java語言實(shí)現(xiàn)八皇后問題

    這篇文章主要介紹了如何基于java語言實(shí)現(xiàn)八皇后問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 在springboot 中使用 AIService的方法

    在springboot 中使用 AIService的方法

    這篇文章主要介紹了在springboot 中使用 AIService的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • 使用spring aop統(tǒng)一處理異常和打印日志方式

    使用spring aop統(tǒng)一處理異常和打印日志方式

    這篇文章主要介紹了使用spring aop統(tǒng)一處理異常和打印日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

赫章县| 龙江县| 阿巴嘎旗| 沅陵县| 尉犁县| 赞皇县| 富源县| 镇赉县| 石柱| 广安市| 宾川县| 长沙县| 星子县| 乐亭县| 竹溪县| 贵港市| 都安| 新宾| 江孜县| 海口市| 剑川县| 永善县| 根河市| 三门县| 元氏县| 蓬莱市| 勐海县| 汉川市| 祁阳县| 汝南县| 新竹市| 利川市| 大新县| 合阳县| 遂平县| 田阳县| 丹江口市| 太白县| 濉溪县| 东乡县| 桃园县|