国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java數據結構基礎:線性表

java數據結構基礎:線性表

2021-10-25 13:07魚小洲 Java教程

這篇文章主要介紹了Java的數據解構基礎,希望對廣大的程序愛好者有所幫助,同時祝大家有一個好成績,需要的朋友可以參考下,希望能給你帶來幫助

前言

其實線性表在生活中和棧的結構差不多。昨天總結了一篇單鏈表,也是線性表的一種。

今天用另一種寫法來控制指針的移動實現數據的順序存儲結構。

需求分析

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

其次,我們還得去定義好線性表的長度,以及每個元素的指針。

?
1
2
3
4
private Object[] arr; // 底層的結構
private int index = -1; // 代表元素的索引位置
private int size; // 當前線性表的長度
private int LinearListLength = 4; // 線性表的默認長度

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

編碼

add方法

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

總體設計比較簡單,看代碼。

?
1
2
3
4
5
6
7
8
9
10
11
public E add(E item) {
        // 先初始化線性表
        capacity();
        // 初始化完成后先把index指針后移一位,也就是+1
        // 后移一位之后將要添加的元素賦值到數組中
        this.arr[++index] = item;
        System.out.println(index);
        // 添加完成后長度+1
        this.size++;
        return item;
    }

getIndex方法

getIndex方法主要是用來獲取指定位置的元素,這個就很簡單了,因為底層是數組,所以我們可以直接用數組的索引去獲取。

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

pop方法

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * 刪除指定位置的元素
 */
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方法需要傳入兩個參數,一個int類型的索引值,一個泛型數據。在指定位置插入該泛型值,然后將后面的值全部后移一位。

?
1
2
3
4
5
6
7
8
9
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

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

?
1
2
3
4
5
public void getAll() {
        for (Object o : this.arr) {
            System.out.println(o);
        }
    }

這兒遍歷的Object類型會自動轉化成添加元素時的類型

全部代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.zxy.xianxingbiao;
/**
 * @Author Zxy
 * @Date 2021/2/4 16:54
 * @Version 1.0
 */
import java.util.Arrays;
/**
 * 演示線性表的使用  底層使用數組
 */
public class MyLinearList<E> {
    private Object[] arr; // 底層的結構
    private int index = -1; // 代表元素的索引位置
    private int size; // 當前線性表的長度
    private int LinearListLength = 4; // 線性表的默認長度
    /**
     * 判斷線性表是否為空
     */
    public boolean empty() {
        return this.size == 0 ? true : false;
    }
    /**
     * 給線性表中添加元素
     */
    public E add(E item) {
        // 先初始化線性表
        capacity();
        // 初始化完成后先把index指針后移一位,也就是+1
        // 后移一位之后將要添加的元素賦值到數組中
        this.arr[++index] = item;
        System.out.println(index);
        // 添加完成后長度+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);
        }
    }
    /**
     * 數組初始化或者以1.5倍容量對數組擴容
     */
    private void capacity() {
        // 數組初始化
        if (this.arr == null) {
            this.arr = new Object[this.LinearListLength];
        }
        // 以1.5倍對數組擴容
        if (this.size - (this.LinearListLength - 1) >= 0) { // 如果當前數組的元素個數大于了當前數組的最后一個索引值
            this.LinearListLength = this.LinearListLength + (this.LinearListLength >> 1); // 位運算,讓長度變成原來的1/2
            this.arr = Arrays.copyOf(this.arr, this.LinearListLength); // 復制一個新的數組,用新開辟的長度
        }
    }
    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();
    }
}

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/weixin_43581288/article/details/113658746

延伸 · 閱讀

精彩推薦
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
主站蜘蛛池模板: 亚洲成人av | 97国产资源| 亚洲精品久久久久久动漫 | 快色视频在线观看 | 欧美日韩一区二 | 一本一道久久a久久精品逆3p | 精品久久久久久久久久久 | 精品一区二区三区四区五区 | 成人精品一区二区 | 中文字幕91 | 免费毛片视频 | 视频1区 | 久久久精品久久久久 | 亚洲四区 | 国产成人精品一区二区三区网站观看 | 成人国产精品免费观看 | 日韩在线观看视频一区二区三区 | 自拍小电影 | 国产精品99久久久久久动医院 | 情一色一乱一欲一区二区 | 一区二区三区在线免费播放 | 国产高清一区二区 | 亚洲va欧美va人人爽成人影院 | 极品久久 | 一级毛片免费完整视频 | 精品国产一区二区三区日日嗨 | 亚洲字幕 | 成人爱情偷拍视频在线观看 | 999久久久国产999久久久 | 久操视频免费在线观看 | 亚洲精品欧美在线 | 国产欧美在线观看 | 久久精品一级毛片 | 大香伊蕉在人线视频777 | 国产综合精品一区二区三区 | 在线观看中文字幕 | 亚洲人成网站在e线播放 | 精品视频在线播放 | 九九导航| 国产视频网| 日韩成人免费 |