1. 程式人生 > >數組的介紹

數組的介紹

分配 不重復 people 遙控器 contains core ++ ins strings

數組是指一組數據的集合,且同一個數組中存在的數據都是同一類型的,我們用下角標來表示元素在數組中的位置,從 0 開始 。數組的長度表示數組中元素的個數,所以說,長度為 5 的數組的索引是從 0 ~ 4 。

數組的聲明就是在說明一下,哎,註意了,我需要一個容器來存放這些類型相同的元素 。聲明的方式有這些。 int[] arr ; int arr[] 或是 對象的集合 People[] p ; 這樣就聲明了一個數組 。但註意此時只是一個在棧中的變量 。接下來就是數組的初始化,使用 new 關鍵字可以在堆中申請一塊空白區域用於保存數組中的元素 。語法是這樣,int[] arr = new int[5]; 這就表示創建了一個 5 個 int 類型的元素,而且這些元素是有默認值的,基本數據類型的默認值參考上一節,引用類型的元素默認值為 null 。另外數組在創建的時候需要指定其長度,且數組的長度在之後不可變 。像上面我們是指定了長度為 5 ,也可以傳入一個變量 。這裏解釋一個數組的長度不可變,我們是用 arr 這個變量(遙控器)來操作堆中的數組,但是 arr 還是可以指向其它的數組對象的 ,所以我們說的數組不可變是值堆中的數組實體一旦創建,就不可變,而不是 arr 不能變。

到這裏我們就已經得到一個空白的數組對象,有關於數組的操作等下說 。先說一下二維數組的定義和內存分配的情況 。我們可以把二維數組想象成是一維數組的數組,比如 int [][] arr = new int [2][3]; 這表示創建一個 2 行 3 列的數組,可以看成是 int[0] = new int[3] int[1] = new int[3]; 這樣兩個一維數組 。或許看看圖片能剛好的理解,這裏放幾張來自百度的數組在內存中的分配圖 。

技術分享圖片

技術分享圖片

看到這裏應該也明白了為什麽會有索引了吧,因為沒有索引根本定位不到具體的值呀 !

下面就來看一下數組的常用操作 。

  1 /**
  2 數組的聲明與創建
3 */ 4 5 String [] arr; 6 int arr1[]; 7 String[] array=new String[5]; 8 int score[]=new int[3]; 9 10 /** 11 數組賦值 12 */ 13 14 //初始化時賦值 15 int arr2[]=new int[]{1,2,3,4,5}; 16 String[] array1={"馬超","馬雲","關羽","劉備","張飛"}; 17 String[] array2=new String[]{"黃渤","張藝興","黃磊"}; 18 int score[]=new
int[3]; 19 //動態賦值 20 for(int i=0;i<score.length;i++) 21 { 22   score[i]=i+1; 23 } 24 25 /** 26 打印數組 27 */ 28 29 int[] arr = { 1, 2, 3, 4, 5 }; 30 String arrString = Arrays.toString(arr); 31 32 // 直接輸出,為內存地址 33 System.out.println(arr); 34 // [I@139a55 35 36 System.out.println(arrString ); 37 // [1, 2, 3, 4, 5] 38 39 /** 40 int 數組轉成 string 數組 41 */ 42 43 int[] array3={1,2,3,4,5,6,7,8,9,0}; 44 String arrStrings=Arrays.toString(array3); 45 46 /** 47 數組轉成 list 集合 48 */ 49 50 String[] array2 = new String[]{"黃渤","張藝興","孫紅雷","黃磊"}; 51 //方法 1 52 List<String> list=new ArrayList<String>(); 53 for (int i = 0; i < array2.length; i++) { 54 list.add(array2[i]); 55 } 56 57 String[] arrStrings2={"1","2","3"}; 58 //方法 2 59 List<String > list2=java.util.Arrays.asList(arrStrings2); 60 61 /** 62 檢查數組中是否包含某一個值 63 */ 64 65 String a="馬超"; 66 String[] array1={"馬超","馬雲","關羽","劉備","張飛"}; 67 if (Arrays.asList(array1).contains(a)) { 68 System.out.println("馬超在這裏"); 69 } 70 71 /** 72 數組轉成 set 集合 73 */ 74 75 String[] array2=new String[]{"黃渤","張藝興","孫紅雷","黃磊"}; 76 Set<String> set=new HashSet<String>(Arrays.asList(array2)); 77 78 /** 79 數組的排序 sort() : 從小到大排序 。下一節總結一下排序的算法 。 80 */ 81 82 //方法 1 83 int[] arr4 = {3, 7, 2, 1, 9}; 84 Arrays.sort(arr4); // sort(int[] a) 放入數組名字 85 for (int i = 0; i < arr4.length; i++) { 86 System.out.println(arr4[i]); 87 } 88 //方法 2 89 int[] arr5 = {3, 7, 2, 1, 9,3,45,7,8,8,3,2,65,34,5}; 90 Arrays.sort(arr5, 1, 4); // sort(a, fromIndex, toIndex) 從第幾個到第幾個之間的進行排序 91 92 /** 93 數組的復制 94 */ 95 96 //方法 1 97 int[] arr6 = {3, 7, 2, 1}; 98 int[] arr7=Arrays.copyOf(arr6, 10); //指定新數組的長度 99 //方法 2 100 int[] arr8=Arrays.copyOfRange(arr6, 1, 3); //只復制從索引[1]到索引[3]之間的元素(不包括索引[3]的元素) 101 for (int i = 0; i < arr8.length; i++) { 102 System.out.println(arr8[i]); 103 } 104 105 // 比較兩個數組 106 boolean arr10=Arrays.equals(arr6, arr9); 107 108 /** 109 數組的去重 110 */ 111 112 int[] arr11 = {1, 2, 3, 4,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3}; 113 //利用set的特性(無序不重復) 114 Set<Integer> set2=new HashSet<Integer>(); 115 for (int i = 0; i < arr11.length; i++) { 116 set2.add(arr11[i]); 117 } 118 System.out.println(set2); 119 int[] arr12 = new int[set2.size()]; 120 int j=0; 121 for (Integer i:set2) { 122 arr12[j++]=i; 123 } 124 System.out.println(Arrays.toString(arr12));

數組的介紹