激情久久久_欧美视频区_成人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賦值給數組得到索引區域,再讓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類型的索引。由于特殊性,我們必須得借用上面的獲取指定位置的元素的方法來實現這一步驟。

在元素刪除后,通過遍歷循環去將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

這個方法不用我多說了,一個簡單的遍歷循環

?
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代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

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

    Java使用SAX解析xml的示例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java實現搶紅包功能

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

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

    xml與Java對象的轉換詳解

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

    Java教程網2942020-09-17
547
主站蜘蛛池模板: 亚洲精品久久久久久下一站 | 污视频在线免费 | 欧美一级黄色片免费观看 | 国产精品久久久久久久久久久久久久久 | 日日操操 | 黄色毛片一级视频 | 久久精片 | 国产一区二区视频网站 | 成人观看网站 | 精品一区二区免费 | 精品免费在线视频 | 国产一区二区成人在线 | 成人性视频免费网站下载软件 | 一边吃奶一边摸下娇喘 | 中午字幕无线码一区2020 | 日日噜噜噜噜久久久精品毛片 | freexxx69性欧美hd| 亚洲免费在线看 | 欧美毛片| 毛片免费在线观看视频 | 一区二区久久精品66国产精品 | 国产精品美女久久久久久网站 | 91在线色 | 亚州欧美在线 | 美女在线观看视频一区二区 | 免费黄色大片在线观看 | h视频在线播放 | 毛片视频观看 | 久久精品亚洲一区二区 | 加勒比色综合 | 全黄毛片| 日本成年网 | 国产激情精品一区二区三区 | av电影在线网站 | 精品国产一区二区三区在线观看 | 成年人网站视频免费 | 一级黄色免费观看 | 国产无区一区二区三麻豆 | 欧美成人理论片乱 | 国产欧美亚洲精品 | 久久人体 |