中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

深入淺析Java中的數組

發布時間:2020-11-17 14:57:15 來源:億速云 閱讀:144 作者:Leah 欄目:編程語言

深入淺析Java中的數組?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

數組的用處是什么呢?——當你需要將30個數進行大小排列的時候,用數組這樣的數據結構存儲是個很好的選擇,當你是一個班的班主任的時候,每次要記錄那些學生的缺勤次數的時候,數組也是很有用。數組可以進行插入,刪除,查找等。

1)創建和內存分配

Java中有兩種數據類型,基本類型和對象類型,也有人稱為引用類型,Java中把數組當成對象,創建數組時使用new操作符。

 int array[] = new int[10]; 

既然是對象,那么array便是數組的一個引用,根據Java編程思想(一) —— 一切都是對象 的內存分配,array會在棧中開辟空間,并且空間存儲著保存數組存儲的地址,真正保存對象的地方是對,new操作在堆中開辟了所需的空間,然后array指向頭地址。

初始化:

public class UseArray { 
   public static void main(String[] args) { 
     int array[] = new int[10]; 
     System.out.println(array[2]); 
     UseArray a[] = new UseArray[12]; 
     System.out.println(a[1]); 
     int array2[] ={1,2,3,4,5,5,6}; 
   } 
 } 

new后的數組里面的值被默認初始化為0,而對象的初始化是空的,null,當然還可以通過{}的方式初始化。

2)數組封裝后的使用

public class UseArray { 
   private int[] array; 
   private int number = 0; 
   public UseArray(int max){ 
     array = new int[max]; 
   } 
   public void insert(int value){ 
     array[number] = value; 
     number++; 
   } 
   public int find(int value){ 
     for (int i= 0; i < number; i++) { 
       if(array[i]==value) 
         return i; 
     } 
     return number; 
   } 
   public boolean delete(int value){ 
     int index = find(value); 
     if(index != number){ 
       for (int i = index; i < number-1; i++) { 
         array[i] = array[i+1]; 
       } 
       number--; 
       return true; 
     } 
     return false; 
   } 
   public void display(){ 
     for (int i = 0; i < number; i++) { 
       System.out.printf(array[i]+" "); 
     } 
   } 
   public static void main(String[] args) { 
     UseArray ua = new UseArray(5); 
     ua.insert(1); 
     ua.insert(2); 
     ua.insert(6); 
     ua.insert(7); 
     ua.insert(3);       
     ua.display(); 
     if(ua.find(5) != ua.number){ 
       System.out.println("find,the number index is "+ua.find(5)); 
     }else{ 
       System.out.println("not found!"); 
     } 
     if(ua.delete(5)!=true){ 
       System.out.println("can not delete!"); 
     } 
    ua.display(); 
   } 
 } 

將整個數組封裝,用number代替數組的個數,插入數據的時候也不必理會往哪個下標插,當然,也可以自定義一個具體下標的方法。

方法比較簡單就不介紹了,但是存在的一個缺點在delete那里,其實只是從刪除元素開始的左移而已,所以,雖然number減少了,但是最后一個元素并沒有刪除掉,只是display輸出展示的時候隱藏了而已,但是,下次插入元素的時候新元素便會取代掉最后一個元素的位置。

3)查找優化——二分查找

 public int find(int value){ 
     int start = 0; 
     int end = number-1; 
     while(end>=start){ 
       int index =(end + start)/2;  
       if(array[index]==value){ 
         return index; 
       }else if(array[index] >value){ 
         end = index-1; 
       }else {  
         start = index+1; 
       } 
     } 
     return number; 
   } 

二分查找前提是數組已經有序。剛開始index寫成end和start相減,造成死循環。其實要的是相加。1,2,3,6,7。index=2,value=7,3小于7,start=3,那么index要的是3和4間的中間數,所以是相加之后除以2,6小于7,start=4,find到7。

4)大O表示法

設N為數據總數,加入插入一個數據時間為K。那么線性查找總時間T=K*N/2,因為查找的話大概為比較數目的一半。

二分查找的話T=k*log2(N)。大O表示法,O可以看成是order of,大約是的意思,k/2也是常數,所以可以看成是O(N)。

數組的缺點呢,就是大小固定,查找慢,如果你要經常查找百萬級別的數據,還會用數組嗎?不會的,所以數據結構的選用要結合具體的實際情況,達到最大的效率值。

關于深入淺析Java中的數組問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

突泉县| 宣武区| 班玛县| 崇左市| 武义县| 上高县| 延吉市| 板桥市| 文安县| 鄂温| 海林市| 蒙城县| 丽水市| 包头市| 景东| 宁都县| 甘肃省| 乐平市| 苗栗市| 康保县| 临海市| 长葛市| 孝昌县| 漾濞| 怀柔区| 成武县| 宁阳县| 茂名市| 黎川县| 开化县| 广水市| 莱芜市| 巴南区| 双峰县| 寿宁县| 科尔| 水城县| 方城县| 会昌县| 中宁县| 谷城县|