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

數(shù)據(jù)結(jié)構(gòu)Java版(1)——數(shù)組

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)Java版(1)——數(shù)組。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、數(shù)據(jù)結(jié)構(gòu)

  1. 是一門(mén)基礎(chǔ)學(xué)科
  2. 研究的是數(shù)據(jù)如何在計(jì)算機(jī)中進(jìn)行組織和存儲(chǔ),使得我們可以高效的獲取數(shù)據(jù)和修改數(shù)據(jù)
  3. 數(shù)據(jù)結(jié)構(gòu)可以分為三類(lèi): 線性結(jié)構(gòu): 數(shù)組、隊(duì)列、棧、鏈表、哈希表… 樹(shù)型結(jié)構(gòu):二叉樹(shù)、二分搜索樹(shù)、AVL樹(shù),紅黑樹(shù)、堆、Trie、線段樹(shù)、并查集… 圖結(jié)構(gòu):鄰接矩陣、鄰接表 排序算法
  4. 為什么學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu): 根據(jù)不同的應(yīng)用,靈活選擇最合適的數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu) + 算法 = 程序

二、數(shù)組

1、數(shù)組基礎(chǔ)

  • 用來(lái)存儲(chǔ)一組類(lèi)型相同的數(shù)據(jù)
  • 在內(nèi)存中,分配連續(xù)的空間,數(shù)組創(chuàng)建時(shí)要指定容量(大?。?/li>
  • 數(shù)據(jù)類(lèi)型[] 數(shù)組名 int[] arr = new int[10] int[] arr2 = {1,2,3,4}
  • 索引---訪問(wèn)數(shù)組時(shí)通過(guò)索引進(jìn)行操作
  • 索引從0開(kāi)始,最大為 arr.length -1
  • 常見(jiàn)的錯(cuò)誤: NullPointException和ArrayIndexOutOfBoundsException
  • 常見(jiàn)的數(shù)組: 字符串, 對(duì)象數(shù)組,哈希表

2.Java中數(shù)組的特點(diǎn)

(1)數(shù)組在內(nèi)存中連續(xù)分配;

(2)創(chuàng)建數(shù)組時(shí)要指明數(shù)組的大小;

(3)可以通過(guò)索引進(jìn)行訪問(wèn),索引從0開(kāi)始,這里索引可以理解為偏移量;

(4)使用索引:

  • 獲取指定索引位置的值——arr[index]
  • 修改指定索引位置的值——arr[inedx]
  • 刪除數(shù)組中元素(假刪除)

(5)數(shù)組的遍歷:將數(shù)組中元素打印出來(lái);

(6)數(shù)組創(chuàng)建好之后,大小不能改變。

3.演示數(shù)組的使用

import java.util.Arrays;
import java.util.Comparator;

public class ArrayDome {
    public static void main(String[] args) {
        //練習(xí)數(shù)組的相關(guān)知識(shí)
        //1.定義數(shù)組
        int[] ints  =  new int[]{1,1,4,5,1,4};
        //獲取數(shù)組長(zhǎng)度
        int length = ints.length;
        //獲取指定元素位置
        int num = ints[2];
        System.out.println(num);
        //修改元素
        ints[2] =100;
        num = ints[2];
        System.out.println(num);
        //遍歷數(shù)組
        for(int i= 0;i < ints.length;i++){
            System.out.print(ints[i]+"\t");
        }
        System.out.println();
        //數(shù)組越界錯(cuò)誤
        try{
            System.out.println(ints[length]);
        }catch (Exception e){
            e.printStackTrace();
        }
        //數(shù)組為空錯(cuò)誤
        String[] strings = null;
        try{
            System.out.println(strings);
            length = strings.length;
        }catch (Exception e){
            e.printStackTrace();
        }
        //數(shù)組的排序
        Arrays.sort(ints);
        for(int i= 0;i < ints.length;i++){
            System.out.print(ints[i]+"\t");
        }
        System.out.println();
    }
}

輸出結(jié)果:

數(shù)據(jù)結(jié)構(gòu)Java版(1)——數(shù)組,Java,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),java

4.制作自己的數(shù)組

package leetcoke;

import java.util.Arrays;
import java.util.Comparator;

public class MyArray<T> {
    private T[] data;
    private int length;
    private int size;

    //構(gòu)造方法
    public MyArray(int size) {
        if (size <= 0) {
            this.size = 16;
        } else {
            this.size = size;
        }
        this.length = 0;
        this.data = (T[]) new Object[this.size];
    }

    //獲得當(dāng)前的數(shù)組容量
    public int getSize() {
        return this.size;
    }

    //判斷是否為空
    public boolean isEmpty() {
        return this.length == 0;
    }

    //添加
    public void add(T data) throws IllegalAccessException {
        add(this.length,data);
    }

    //在指定位置添加
    public void add(int index, T data) throws IllegalAccessException {
        if (index < 0 || index > this.length) {
            throw new IllegalAccessException("你看你傳的是個(gè)啥!");
        }
        //判斷數(shù)組已滿(mǎn)
        if(this.size==this.length){
            //擴(kuò)容
            resize(this.size*2);
        }

        for (int i = this.length; i > index; i--) {
            this.data[i] = this.data[i - 1];
        }
        this.data[index] = data;
        this.length++;
    }

    //擴(kuò)容
    private void resize(int newCapacity){
        T[] newData = (T[]) new Object[newCapacity];
        newData = Arrays.copyOf(this.data,newCapacity);
        this.data = newData;
        this.size = newCapacity;
    }

    //修改指定位置的值
    public void modifyValueByIndex(int index, T value) throws IllegalAccessException {
        //入?yún)⑴袛?        if (index < 0 || index >= this.size) {
            throw new IllegalAccessException("你看你傳的是個(gè)啥!");
        }
        this.data[index] = value;
    }

    //獲取位置上的值
    public T getValueByIndex(int index) throws IllegalAccessException {
        //入?yún)⑴袛?        if (index < 0 || index >= this.size) {
            throw new IllegalAccessException("你看你傳的是個(gè)啥!");
        }
        return this.data[index];
    }

    //查詢(xún)
    public int containsValue(T val) {
        int i;
        for (i = this.length - 1; i >= 0; i--) {
            if (this.data[i] == val) {
                return i;
            }
        }
        return i;
    }

    //根據(jù)索引刪除
    public T removeByIndex(int index) throws IllegalAccessException {
        //入?yún)⑴袛?        if (this.length == 0) throw new IllegalAccessException("已經(jīng)一點(diǎn)都不剩下了!");
        if (index < 0 || index >= this.size) {
            throw new IllegalAccessException("你看你傳的是個(gè)啥!");
        }
        T res = this.data[index];
        for (int i = index + 1; i < this.length; i++) {
            this.data[i - 1] = this.data[i];
        }
        this.length--;
        if(this.length<=this.size/3 && this.size/2!=0){
            resize(this.size/2);
        }
        return res;
    }


    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer("[");
        for (int i = 0; i < this.length; i++) {
            buffer.append(this.data[i]);
            if (i != this.length - 1) {
                buffer.append(",");
            }
        }
        buffer.append("]");
        return buffer.toString();
    }

    //排序
    private T[] toArray1() {
        return Arrays.copyOf(data, length);
    }

    public void sort() {
        T[] array = toArray1();
        Arrays.sort(array, new Comparator<T>() {
            @Override
            public int compare(T o1, T o2) {
                if ((o1 instanceof Integer) || (o1 instanceof Float) || (o1 instanceof Double) || (o1 instanceof Short) || (o1 instanceof Long) || (o1 instanceof Byte)) {
                    return (Integer) o1 - (Integer) o2;
                }
                return 0;
            }
        });
        for(int i = 0;i < this.length;i++){
            this.data[i] = array[i];
        }
    }

    public static void main(String[] args) throws IllegalAccessException {
        MyArray<Integer> array = new MyArray<>(5);
        //輸入數(shù)組的值
        for (int i = 0; i < 5; i++) {
            array.add((int) (Math.random() * 100 % 11));
        }
        try {
            System.out.println(array.getSize());
            array.add(3, 8);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //排序
        array.sort();
        //遍歷
        System.out.println(array);

        //查詢(xún)
        try {
            System.out.println(array.getValueByIndex(2));
            //找索引
            System.out.println("8在數(shù)組中的位置為:" + array.containsValue(8));
        } catch (Exception e) {
            e.printStackTrace();
        }

        //刪除值
        try {
            System.out.println(array.removeByIndex(array.containsValue(8)));

        } catch (Exception e) {
            e.printStackTrace();
        }


        //刪除索引的位置
        try {
            System.out.println(array.removeByIndex(3));


        } catch (Exception e) {
            e.printStackTrace();
        }

        //向數(shù)組中指定位置添加元素
        try {
            System.out.println(array.getSize());
            array.add(3, 8);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(array);


        coke coke1 = new coke("coke", 18);
        coke coke2 = new coke("coke", 20);
        MyArray<coke> cokeMyArray = new MyArray<>(0);
        cokeMyArray.add(coke1);
        cokeMyArray.add(coke2);
        System.out.println(cokeMyArray);
    }
}

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-803729.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)Java版(1)——數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java 數(shù)據(jù)結(jié)構(gòu)篇-用鏈表、數(shù)組實(shí)現(xiàn)隊(duì)列(數(shù)組實(shí)現(xiàn):循環(huán)隊(duì)列)

    Java 數(shù)據(jù)結(jié)構(gòu)篇-用鏈表、數(shù)組實(shí)現(xiàn)隊(duì)列(數(shù)組實(shí)現(xiàn):循環(huán)隊(duì)列)

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ? 文章目錄 ? ? ? ? 1.0 隊(duì)列的說(shuō)明 ????????1.1 隊(duì)列的幾種常用操作 ? ? ? ? 2.0 使用鏈表實(shí)現(xiàn)隊(duì)列說(shuō)明 ????????2.1 鏈表實(shí)現(xiàn)隊(duì)列 ????????2.2 鏈表實(shí)現(xiàn)隊(duì)列 - 入棧操作 ????????2.3 鏈表實(shí)現(xiàn)隊(duì)

    2024年02月05日
    瀏覽(19)
  • 用java以數(shù)組為底層數(shù)據(jù)結(jié)構(gòu)創(chuàng)建自己的棧

    ??梢越鉀Q什么問(wèn)題呢: 1.括號(hào)匹配問(wèn)題 2.遞歸 3.表達(dá)式求值問(wèn)題 首先明確棧的功能: 1.入棧:給底層數(shù)組的尾部插入元素相當(dāng)于入棧 2.出棧:把底層數(shù)組的最后一個(gè)元素提出來(lái)相當(dāng)于出棧 3.獲取棧長(zhǎng)度:獲取size 4.判斷棧是否為空:底層數(shù)組size==0則為空 5.獲取棧頂:返回底層

    2024年01月20日
    瀏覽(23)
  • Java 數(shù)據(jù)結(jié)構(gòu)篇-用數(shù)組、堆實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

    Java 數(shù)據(jù)結(jié)構(gòu)篇-用數(shù)組、堆實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

    ??博客主頁(yè):?【 小扳_-CSDN博客】 ?感謝大家點(diǎn)贊??收藏?評(píng)論? ?? 文章目錄 ? ? ? ? 1.0 優(yōu)先級(jí)隊(duì)列說(shuō)明 ? ? ? ? 2.0 用數(shù)組實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列 ? ? ? ? 3.0?無(wú)序數(shù)組實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列 ? ? ? ? 3.1 無(wú)序數(shù)組實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列 - 入隊(duì)列 offer(E value) ? ? ? ? 3.2 無(wú)序數(shù)組實(shí)現(xiàn)優(yōu)先

    2024年02月04日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】1、學(xué)習(xí)動(dòng)態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)(基本模擬實(shí)現(xiàn) Java 的 ArrayList 實(shí)現(xiàn)增刪改查)

    【數(shù)據(jù)結(jié)構(gòu)與算法】1、學(xué)習(xí)動(dòng)態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)(基本模擬實(shí)現(xiàn) Java 的 ArrayList 實(shí)現(xiàn)增刪改查)

    ?? 數(shù)據(jù)結(jié)構(gòu)是 計(jì)算機(jī) 存儲(chǔ) 、 組織 數(shù)據(jù)的方式 ?? 線性 結(jié)構(gòu) 線性表(數(shù)組、鏈表、棧、隊(duì)列、哈希表) ?? 樹(shù)形 結(jié)構(gòu) 二叉樹(shù) AVL 樹(shù) 紅黑樹(shù) B 樹(shù) 堆 Trie 哈夫曼樹(shù) 并查集 ?? 圖形 結(jié)構(gòu) 鄰接矩陣 鄰接表 ?? 線性表是具有 n 個(gè) 相同類(lèi)型元素 的有限 序列 (n = 0) a1 是首節(jié)點(diǎn)

    2024年02月10日
    瀏覽(20)
  • java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode209. 長(zhǎng)度最小的子數(shù)組

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode209. 長(zhǎng)度最小的子數(shù)組

    java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說(shuō)明我沒(méi)寫(xiě)完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 代碼:時(shí)間復(fù)雜度O(n).空間復(fù)雜度O(1)

    2024年01月21日
    瀏覽(96)
  • 【JavaSE專(zhuān)欄48】Java集合類(lèi)ArrayList解析,這個(gè)動(dòng)態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)你了解嗎?

    【JavaSE專(zhuān)欄48】Java集合類(lèi)ArrayList解析,這個(gè)動(dòng)態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)你了解嗎?

    作者主頁(yè) :Designer 小鄭 作者簡(jiǎn)介 :3年JAVA全棧開(kāi)發(fā)經(jīng)驗(yàn),專(zhuān)注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 Java 中集合類(lèi) ArrayList 的語(yǔ)法、使用說(shuō)明和應(yīng)用場(chǎng)景,并給出了樣例代碼。

    2024年02月16日
    瀏覽(27)
  • Java常見(jiàn)的數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、數(shù)組、鏈表、二叉樹(shù)、二叉查找樹(shù)、平衡二叉樹(shù)、紅黑樹(shù)

    Java常見(jiàn)的數(shù)據(jù)結(jié)構(gòu):棧、隊(duì)列、數(shù)組、鏈表、二叉樹(shù)、二叉查找樹(shù)、平衡二叉樹(shù)、紅黑樹(shù)

    數(shù)據(jù)結(jié)構(gòu)是計(jì)算機(jī)底層存儲(chǔ)、組織數(shù)據(jù)的方式。是指數(shù)據(jù)相互之間是以什么方式排列在一起的。 通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來(lái)更高的運(yùn)行或者存儲(chǔ)效率 棧 隊(duì)列 數(shù)組 鏈表 二叉樹(shù) 二叉查找樹(shù) 平衡二叉樹(shù) 紅黑樹(shù)... 后進(jìn)先出,先進(jìn)后出 數(shù)據(jù)進(jìn)入棧模型的過(guò)程稱(chēng)為

    2024年02月07日
    瀏覽(29)
  • Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)和源碼閱讀(線性數(shù)據(jù)結(jié)構(gòu))

    Java數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)和源碼閱讀(線性數(shù)據(jù)結(jié)構(gòu))

    鏈表的數(shù)據(jù)結(jié)構(gòu) 一組由節(jié)點(diǎn)組成的數(shù)據(jù)結(jié)構(gòu),每個(gè)元素指向下一個(gè)元素,是線性序列。 最簡(jiǎn)單的鏈表結(jié)構(gòu): 數(shù)據(jù) 指針(存放執(zhí)行下一個(gè)節(jié)點(diǎn)的指針) 不適合的場(chǎng)景: 需要循環(huán)遍歷將導(dǎo)致時(shí)間復(fù)雜度的提升 鏈表分類(lèi)—單向鏈表 鏈表結(jié)構(gòu): 數(shù)據(jù) 指針 Next(指向下一個(gè)節(jié)點(diǎn))

    2024年02月12日
    瀏覽(25)
  • Java 數(shù)據(jù)結(jié)構(gòu)集合

    Java 數(shù)據(jù)結(jié)構(gòu)集合

    詳細(xì)請(qǐng)轉(zhuǎn)到@pdai的博客 1.1 數(shù)組 (Array) 數(shù)組的優(yōu)點(diǎn): 存取速度快 數(shù)組的缺點(diǎn): 事先必須知道數(shù)組的長(zhǎng)度 插入刪除元素很慢 空間通常是有限制的 需要大塊連續(xù)的內(nèi)存塊 插入刪除元素的效率很低 源碼分析: 1、底層數(shù)據(jù)結(jié)構(gòu)是Object 2、構(gòu)造函數(shù)包括無(wú)參構(gòu)造和有參數(shù)構(gòu)造,有參構(gòu)

    2024年01月24日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu)——鏈表(java)

    數(shù)據(jù)結(jié)構(gòu)——鏈表(java)

    1.1 定義 鏈表是一種物理存儲(chǔ)結(jié)構(gòu)上非連續(xù)存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的引用鏈接次序?qū)崿F(xiàn)的。 如圖所示: 1.2 鏈表分類(lèi) 單向、雙向;帶頭、不帶頭;循環(huán)、非循環(huán) 重點(diǎn) :?jiǎn)蜗虿粠ь^非循環(huán)、雙向不帶頭非循環(huán)(集合類(lèi)底層) 如圖:?jiǎn)雾?xiàng)帶頭非循環(huán)鏈表結(jié)

    2024年02月09日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包