成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭開數(shù)組的真面目

存儲 存儲軟件
數(shù)組做為一種基礎(chǔ)的數(shù)據(jù)存儲結(jié)構(gòu),應(yīng)用十分廣泛。數(shù)組是用連續(xù)的內(nèi)存空間來存儲固定長度的、相同數(shù)據(jù)類型的一種數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是跟語言無關(guān)的,這里,使用java來進(jìn)行數(shù)組的相關(guān)操作。數(shù)組的索引是從0開始的。

[[337138]]

數(shù)組做為一種基礎(chǔ)的數(shù)據(jù)存儲結(jié)構(gòu),應(yīng)用十分廣泛。數(shù)組是用連續(xù)的內(nèi)存空間來存儲固定長度的、相同數(shù)據(jù)類型的一種數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)是跟語言無關(guān)的,這里,使用java來進(jìn)行數(shù)組的相關(guān)操作。數(shù)組的索引是從0開始的。

 

一 數(shù)組初始化

創(chuàng)建數(shù)據(jù)有兩種方式,一種是先申請一個固定長度的數(shù)據(jù),然后再給數(shù)組賦值,另一種是直接賦值。

第一種:

  1. 數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[長度]; 

這里的[]標(biāo)識這申明了一個數(shù)組,這個[]除了可以放在數(shù)據(jù)類型后面,也可以放在數(shù)組名詞后面,效果一樣。假如我申明一個長度為2的long類型的數(shù)組,并賦值:

  1. long[] arr = new long[2]; 
  2. arr[0] = 1; 
  3. arr[1] = 2; 

第二種:

  1. 數(shù)據(jù)類型[] 數(shù)組名稱 = {元素1,元素2, ...}; 

這樣在數(shù)組初始化的時候直接給數(shù)組賦值,數(shù)組的長度由元素的個數(shù)決定。

二 自定義類封裝數(shù)組實現(xiàn)數(shù)據(jù)操作

  1. public class MyArray { 
  2.  
  3.     // 自定義數(shù)組 
  4.     private long[] arr; 
  5.     // 有效數(shù)據(jù)長度 
  6.     private int element; 
  7.  
  8.     public MyArray(){ 
  9.         arr = new long[9]; 
  10.     } 
  11.  
  12.     public MyArray(int maxsize){ 
  13.         arr = new long[maxsize]; 
  14.     } 
  15.     /** 
  16.      * 顯示數(shù)組元素 
  17.      */ 
  18.     public void display(){ 
  19.         System.out.print("["); 
  20.         for (int i = 0; i < element; i++) { 
  21.             System.out.print(arr[i]+" "); 
  22.         } 
  23.         System.out.print("]"); 
  24.     } 

2.1 添加元素

數(shù)組是用連續(xù)的內(nèi)存空間來存儲數(shù)據(jù)的,則每次添加的時候會往當(dāng)前數(shù)組的最后一個元素上添加元素,一次就可以加上元素,所以它的復(fù)雜度為O(1),假如定義一個長度為9數(shù)組,數(shù)組中已經(jīng)有兩個元素,則添加第三個元素如下:

  1. public void add(long value){ 
  2.     arr[element] = value; 
  3.     element++; 

2.2 根據(jù)值查詢元素位置

這種查找方式也叫做線性查找,就是根據(jù)傳入的值循環(huán)去遍歷元素,來獲取對應(yīng)的位置,理論上平均查詢一個元素需要花費(fèi)N/2次,所以它的復(fù)雜度為O(N)。

  1. public int find(long value){ 
  2.     int i; 
  3.     for (i = 0; i < element; i++) { 
  4.         if(value == arr[i]){ 
  5.             break; 
  6.         } 
  7.     } 
  8.     if(i == element){ 
  9.         return -1; 
  10.     }else { 
  11.         return i; 
  12.     } 

2.3 根據(jù)索引查詢元素

根據(jù)索引來查找元素,也就是獲取對應(yīng)位置的元素,其復(fù)雜度為O(1)。

  1. public long get(int index){ 
  2.     if(index >= element || index < 0){ 
  3.         throw new ArrayIndexOutOfBoundsException(); 
  4.     }else { 
  5.         return arr[index]; 
  6.     } 

2.4 根據(jù)索引刪除元素刪除對應(yīng)索引的元素后,我們需要將所有改索引后面的元素,向前移動一位。假如我要刪除索引為2的元素,如下:

 

理論上平均刪除一個元素,我們需要移動N/2次,所以它的時間復(fù)雜度也為O(1)。

  1. public void delete(int index){ 
  2.     if(index >= element || index < 0){ 
  3.         throw new ArrayIndexOutOfBoundsException(); 
  4.     }else { 
  5.         for (int i = index; i < element; i++) { 
  6.             arr[index] = arr[index+1]; 
  7.         } 
  8.         element --; 
  9.     } 

2.5 修改元素

修改某個位置的元素,直接根據(jù)索引就一次就可以修改對應(yīng)的元素,所以它的時間復(fù)雜度為O(1)。

  1. public void change(int index,long newValue){ 
  2.     if(index >= element || index < 0){ 
  3.         throw new ArrayIndexOutOfBoundsException(); 
  4.     }else { 
  5.         arr[index] = newValue; 
  6.     } 

三 有序數(shù)組

有序數(shù)組是數(shù)組的一種特殊類型,有序數(shù)組中的元素按照某種順序進(jìn)行排列。

3.1 添加元素

在添加元素的時候,將元素按順序添加到某個位置。如下,在一個數(shù)組中添加一個33的元素。

 

首先,將索引為3的元素移動到索引為4的位置,然后將索引為2的元素移動到索引為3的位置,最后將33添加到索引為2的位置。理論上插入一個元素需要移動元素的個數(shù)為N/2個,所以它的時間復(fù)雜度為O(N)。

  1. public void add(long value){ 
  2.     int i; 
  3.     for (i = 0; i < element; i++) { 
  4.         if(arr[i]>value){ 
  5.             break; 
  6.         } 
  7.     } 
  8.  
  9.     for (int j = element; j > i; j--){ 
  10.         arr[j] = arr[j-1]; 
  11.     } 
  12.     arr[i] = value; 
  13.     element++; 

3.2 二分法根據(jù)元素查詢索引

在無序數(shù)組中,使用線性法進(jìn)行查找相關(guān)元素,線性法即按索引按個查找。有序數(shù)組可以使用二分法來查找元素,二分法是指將一個數(shù)組從中間分成兩個,判斷元素位于哪個數(shù)組中,然后重復(fù)這樣的操作。

假如有8個元素的一個數(shù)組,數(shù)組內(nèi)容為有序的0-7的序列,要查找5這個元素,第一次分成0-3和4-7兩個數(shù)組,然后再將4-7分成4-5和6-7兩個數(shù)組,最后再將4-5分成4和5就查詢出來具體的元素了,這樣分割3次就可以查詢出長度為8的數(shù)組中具體的元素,其復(fù)雜度即為O(logN)(logN在計算機(jī)中底數(shù)一般指的是2,意思為2的幾次方等于n)。

  1. public int search(long value){ 
  2.     // 中間值 
  3.     int middle = 0; 
  4.     // 最小值 
  5.     int low = 0; 
  6.     // 最大值 
  7.     int pow = element; 
  8.     while (true){ 
  9.         middle = (low + pow) / 2; 
  10.         if(arr[middle] == value){ 
  11.             return middle; 
  12.         }else if (low > pow){ 
  13.             return -1; 
  14.         }else
  15.             if(arr[middle] > value){ 
  16.                 pow = middle - 1; 
  17.             }else
  18.                 low = middle + 1; 
  19.             } 
  20.         } 
  21.     } 

四 總結(jié)

復(fù)雜度越低意味著算法更加優(yōu)秀,所以O(shè)(1) > O(logN) > O(N) > O(N^2)。

算法 復(fù)雜度
線性查找 O(N)
二分法查找 O(logN)
無序數(shù)組插入 O(1)
有序數(shù)組插入 O(N)
無序數(shù)組刪除 O(N)
有序數(shù)組刪除 O(N)

 

  • 無序數(shù)組插入快,查找和刪除慢
  • 有序數(shù)組查找快,插入和刪除慢

本文轉(zhuǎn)載自微信公眾號「Java旅途」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Java旅途公眾號。

 

責(zé)任編輯:武曉燕 來源: Java旅途
相關(guān)推薦

2020-08-12 07:48:11

鏈表單向鏈結(jié)點(diǎn)

2010-09-09 15:05:27

2010-07-07 09:28:25

云計算虛擬化

2009-08-08 09:11:25

Windows 7MSDN版

2009-10-09 16:43:25

2019-05-05 09:24:09

KafkaTopicPartition

2010-06-23 10:24:42

Javascript閉

2011-04-29 09:51:05

投影機(jī)

2011-03-21 15:50:13

上網(wǎng)行為管理百卓網(wǎng)絡(luò)

2011-10-04 16:17:22

Flash

2021-06-02 07:02:42

js作用域函數(shù)

2014-06-26 11:14:35

Google IO 2014

2017-09-01 10:32:56

2009-07-28 09:02:22

2023-05-29 08:32:40

JAVA重寫重載

2025-03-14 13:17:02

2021-04-12 15:06:10

AI 數(shù)據(jù)人工智能

2012-02-09 18:54:22

2017-07-04 13:46:07

C9

2025-05-26 09:07:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成年人视频在线免费观看 | 精品欧美色视频网站在线观看 | 国产精品178页 | 国产又色又爽又黄又免费 | 色av一区二区三区 | 久久久99精品免费观看 | 一级在线免费观看 | 久久久久久精 | 91精品国产综合久久久久久丝袜 | 中文字幕综合 | 一区二区三区福利视频 | 夏同学福利网 | 国产精品久久久久久久久久久久 | 色视频网站 | 欧美一区成人 | 欧美成人精品一区二区男人看 | 亚洲天天干 | 日韩精品一 | 久久精品国产一区二区电影 | 成人欧美一区二区三区视频xxx | 日日骚av | 亚洲品质自拍视频网站 | 国内精品久久久久久 | www狠狠干 | 色综合久久天天综合网 | 亚洲精品专区 | 亚洲xxxxx| 日韩在线不卡 | 在线不卡视频 | 欧美一级黄色片在线观看 | 国产视频在线一区二区 | 91色视频在线观看 | 日本一区二区不卡视频 | 亚洲一区二区三区四区五区中文 | 亚洲一区二区三区在线 | 国产免费一区二区三区免费视频 | 日本一区二区视频 | 国产日韩欧美精品一区二区三区 | 日本一区不卡 | 国产精品久久久久一区二区三区 | 日韩精品一区二区三区中文在线 |