日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【动态数组】数据结构01-(java实现)

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【动态数组】数据结构01-(java实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組

數組的局限性:長度固定,一旦定義不能修改

1. 數組元素的增加

核心思想:

?創建一個新數組,長度為原數組+1,將原數組賦值到新數組, 最后將增加的元素放到新數組最后一個位置,把新數組賦值給原數組。

代碼實現:

import java.util.Arrays;public class ArrayAppend {//在數組末尾追加一個元素public static void main(String[] args) {//解決數組長度不可變問題int[] arr=new int[]{1,2,3};//快速查看數組中的元素System.out.println(Arrays.toString(arr));//目標元素int aim=4;//創建新數組長度+1int[] newArr=new int[arr.length+1];//遍歷將原數組的值放到新數組for (int i=0;i<arr.length;i++){newArr[i]=arr[i];}//將目標元素放到新數組最后newArr[arr.length]=aim;//新數組替換原數組arr=newArr;//打印原數組System.out.println(Arrays.toString(arr));} }

結果:

[1, 2, 3] [1, 2, 3, 4]

2. 數組元素的刪除

核心思想:

(假如刪除索引為index的元素)創建一個新數組,長度為原數組長度-1,遍歷新數組在索引小于index時,我們直接將新數組和原數組對應賦值即可在索引大于index時,我們發現原數組的index+1對應的是新數組,即 newArr[i]=arr[i+1]

代碼實現:

import java.util.Arrays;public class ArrayDelete {//數組元素的刪除public static void main(String[] args) {int[] arr=new int[]{1,2,3,4};System.out.println(Arrays.toString(arr));//刪除元素的下標/位置int index=0;//新的數組長度=原數組-1int[] newArr=new int[arr.length-1];//遍歷新數組for(int i=0;i<newArr.length;i++){if(i<index){newArr[i]=arr[i];}//當i>=index時,因為index處的元素刪除,所以newArr的i對應的arr應當i+1else{newArr[i]=arr[i+1];}}//替換原數組arr=newArr;System.out.println(Arrays.toString(arr));} }

運行結果:

[1, 2, 3, 4] [2, 3, 4]

3. 面向對象的數組

思想:

將操作數組的一系列方法進行封裝,在構造函數中傳入數組,調用方法即對數組增刪改查add insert delete set get 等方法

代碼:

import java.util.Arrays;public class MyArray {//私有成員變量-數組private int[] arr;//初始化public MyArray(){this.arr=new int[0];}//獲取數組長度public int getLength(){return arr.length;}//獲取數組元素public int get(int index){if (index < 0 || index >= arr.length) {throw new RuntimeException("下表越界");}return arr[index];}//修改數組元素public int[] set(int index,int element){if (index < 0 || index >= arr.length) {throw new RuntimeException("下表越界");}arr[index]=element;return arr;}//打印數組元素public void show(){System.out.println(Arrays.toString(arr));}//往數組最后添加元素public void add(int element){//初始化一個數組int[] newArr=new int[arr.length+1];for(int i=0;i<arr.length;i++){newArr[i]=arr[i];}newArr[arr.length]=element;arr=newArr;}//插入元素到指定位置public void insert(int index,int element){//判斷是否下表越界if (index < 0 || index >= arr.length) {throw new RuntimeException("下表越界");}int[] newArr=new int[arr.length+1];//遍歷數組,將arr除了index位置 其他位置全部復制到newArrfor(int i=0;i<arr.length;i++){if(i<index){newArr[i]=arr[i];}else{newArr[i+1]=arr[i];}}//將index位置元素插入newArr[index]=element;//替換arrarr=newArr;}//刪除元素public void delete(int index) {//判斷是否下表越界if (index < 0 || index >= arr.length) {throw new RuntimeException("下表越界");}//新的數組長度=原數組-1int[] newArr = new int[arr.length - 1];//遍歷原數組將除了index的元素復制到新數組for (int i = 0; i < newArr.length; i++) {if (i < index) {newArr[i] = arr[i];} else{newArr[i] = arr[i+1];}}//替換原數組arr = newArr;} }

測試類

public class MyTest {public static void main(String[] args) {MyArray myArray = new MyArray();myArray.add(1);myArray.add(2);myArray.add(3);myArray.add(4);myArray.add(5);myArray.show();System.out.println("第三個元素為:"+myArray.get(2));myArray.set(1,1000);System.out.println("修改了第2個元素為1000");myArray.show();System.out.println("數組長度為:"+myArray.getLength());//插入元素System.out.println("在index為3處插入100");myArray.insert(3,100);myArray.show();//刪除元素System.out.println("刪除索引為4的元素");myArray.delete(4);myArray.show();} }

結果:

[1, 2, 3, 4, 5] 第三個元素為:3 修改了第2個元素為1000 [1, 1000, 3, 4, 5] 數組長度為:5 在index為3處插入100 [1, 1000, 3, 100, 4, 5] 刪除索引為4的元素 [1, 1000, 3, 100, 5]

4. 查找

以下兩個方法可歸并到上面的數組方法中

(1)線性查找

代碼:

//線性查找 public class Search {public static void main(String[] args) {//目標數組int[] arr=new int[]{1,3,5,7,9};//目標元素int target=5;//目標元素下標,-1表示沒有查找到int index=-1;//遍歷數組,找到后終止循環for (int i=0;i<arr.length;i++) {if(arr[i]==target){index=i;break;}}System.out.println("index:"+index);} }

結果:

index:2

二分查找

思想:

(只適用于已經排好序的數組,以從小到大排序舉例)有三個關鍵的記錄值:開始位置begin、中間位置mid、結束位置end每次目標元素都和中間位置mid元素比較,? 如果相等,直接返回下標值,結束查找? 如果大于mid元素則目標元素在mid元素右側,即調整 begin=mid+1? 如果小于mid元素則目標元素在mid元素左側,即調整 end=mid-1重復以上步驟(此處可以用循環,也可用遞歸)

代碼:

//二分法查找 public class BinarySearch {public static void main(String[] args) {//目標數組int[] arr=new int[]{1,3,5,7,9,110,123,234,678,1234,12};//目標元素 目標元素下標int target=1234;int index=-1;//開始、結束、中間位置int begin=0;int end=arr.length-1;int mid=(begin+end)/2;//這里要注意:應該是<= 因為可能begin和end重合時,才找到目標元素while(begin<=end){//如果相等即找到了元素,保存下標,退出循環if(arr[mid]==target){index=mid;break;}else{//目標元素小于mid,說明在左側,end=mid-1if(arr[mid]>target){end=mid-1;//目標元素大于mid,說明在右側,begin=mid+1}else{begin=mid+1;}//記得將中間位置元素重新計算mid=(begin+end)/2;}}System.out.println("index:"+index);} }

結果:

index:9

好啦!我的第一篇博客到這里就結束啦,感謝你觀看到最后。
當作作為記錄自己學習的一種方式,
之后還會接著以這種方式來記錄自己學習數據結構和算法的過程。

總結

以上是生活随笔為你收集整理的【动态数组】数据结构01-(java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。