一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 新手初學Java數(shù)組

新手初學Java數(shù)組

2021-09-28 10:31Prpr君 Java教程

數(shù)組是相同類型數(shù)據(jù)的有序集合數(shù)組描述的是相同類型的若干個數(shù)據(jù),按照一定的先后次序排列組合而成。其中,每一個數(shù)據(jù)稱作一個數(shù)組元素,每個數(shù)組元素可以通過一個下標來訪問它們數(shù)組的聲明創(chuàng)建

什么是數(shù)組

  • 數(shù)組是相同類型數(shù)據(jù)的有序集合
  • 數(shù)組描述的是相同類型的若干個數(shù)據(jù),按照一定的先后次序排列組合而成。
  • 其中,每一個數(shù)據(jù)稱作一個數(shù)組元素,每個數(shù)組元素可以通過一個下標來訪問它們

數(shù)組的聲明創(chuàng)建

  • 首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。下面是聲明數(shù)組變量的語法:
  1. dataType[] array;//例: int[] nums; 推薦使用這種寫法
  2. 或者
  3. dataType array[];//例: int nums[];

使用new來創(chuàng)建數(shù)組的語法:

  1. dataType[] array = new dataType[arraySize]//例 int[] nums = new int[10];

數(shù)組的元素是通過索引訪問的,數(shù)組索引從0開始。

獲取數(shù)組的長度:array.length

練習:用循環(huán)給數(shù)組賦值1到10,并輸出數(shù)組的總和

  1. public static void main(String[] args) {
  2. //創(chuàng)建一個數(shù)組
  3. int[] array = new int[10];
  4. //sum為總和
  5. int sum = 0;
  6. //循環(huán)給數(shù)組賦值
  7. for (int i = 1;i<=array.length;i++){
  8. array[i-1] = i;
  9. }
  10. //循環(huán)遍歷數(shù)組,把每位加到sum計算總和
  11. for (int j = 0;j<array.length;j++){
  12. sum = sum + array[j];
  13. }
  14. System.out.println("數(shù)組總和為:"+sum);
  15. }

內(nèi)存分析:

新手初學Java數(shù)組

結(jié)合以上練習和這張簡單的內(nèi)存分析思維導圖來簡單分析一下數(shù)組是如何生成在java內(nèi)存的?

新手初學Java數(shù)組

三種初始化狀態(tài)

  • 靜態(tài)初始化
  1. int[] a = {1,2,3};
  2. Man[] mans = {new Man(1,1)}//Man是類名
  • 動態(tài)初始化
  1. int[] a = new int[2];
  2. a[0] = 1;
  3. a[1] = 2;

數(shù)組的默認初始化

動態(tài)初始化包含了默認初始化。數(shù)組是引用類型,它的元素相當于類的實例變量,因此數(shù)組一經(jīng)分配空間,其中的每個元素也被按照實例變量同樣的方式被隱式初始化。

  1. int[] a = new int[2];//可以理解為一但通過new實例化了,數(shù)組的每個元素也同樣的被實例化位默認值存在堆的空間里

數(shù)組的四個基本特點

  • 其長度是確定的。數(shù)組一旦被創(chuàng)建,它的大小就是不可以改變的。
  • 其元素必須是相同類型,不允許出現(xiàn)混合類型。
  • 數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。
  • 數(shù)組變量屬引用類型,數(shù)組也可以看成是對象,數(shù)組中的每個元素相當于該對象的成員變量。數(shù)組本身就是對象,Java中對象是在堆中的,因此數(shù)組無論保存原始類型還是其他對象類型,數(shù)組對象本身是在堆中的。

數(shù)組的使用

For-Each循環(huán)

  1. public static void main(String[] args) {
  2. int[] arrays = {1,3,5,7,9};
  3. //JDK1.5以上可以使用,但是沒有下標
  4. for (int array : arrays) {
  5. System.out.println(array);
  6. }
  7. }

數(shù)組作方法入?yún)?/p>

  1. public static void main(String[] args) {
  2. int[] arrays = {2,4,6,8,10};
  3. printArray(reverse(arrays));//輸出10 8 6 4 2
  4. }
  5. //打印數(shù)組元素
  6. public static void printArray(int[] arrays){
  7. for(int i = 0; i < arrays.length; i++){
  8. System.out.print(arrays[i]+" ");
  9. }
  10. }

數(shù)組作返回值

  1. public static void main(String[] args) {
  2. int[] arrays = {2,4,6,8,10};
  3. //使用for-each遍歷出反轉(zhuǎn)后的數(shù)組
  4. for(int array : reverse(arrays)){
  5. System.out.print(array+" ");
  6. }
  7. }
  8. //反轉(zhuǎn)數(shù)組,從數(shù)組最后一個元素到第一個元素
  9. public static int[] reverse(int[] arrays){
  10. int[] result = new int[arrays.length];
  11. for (int i = 0,j=arrays.length-1; i < arrays.length; i++,j--) {
  12. result[j] = arrays[i];
  13. }
  14. return result;
  15. }

多維數(shù)組

多維數(shù)組可以看成是數(shù)組的數(shù)組,比如二維數(shù)組就是一個特殊的一維數(shù)組,其每一個元素都是一個一維數(shù)組。

二維數(shù)組

  1. int a[][] = new int[3][2]//可以看作一個3行2列的數(shù)組來理解

新手初學Java數(shù)組

例:創(chuàng)建并打印二維數(shù)組的所有元素

  1. public static void main(String[] args) {
  2. int[][] arrays = {{1,2},{3,4},{5,6}};
  3. for (int i = 0; i <arrays.length ; i++) {
  4. for (int j = 0;j<arrays[i].length;j++){
  5. System.out.print(arrays[i][j]+" ");
  6. }
  7. System.out.println();
  8. }
  9. }

Arrays類

  • 數(shù)組的工具類java.util.Arrays
  • 由于數(shù)組對象本身并沒有什么方法可以供我們調(diào)用,但API中提供了一個工具類Arrays供我們使用,從而可以對數(shù)據(jù)對象進行一些基本的操作。
  • Arrays類中的方法都是static修飾的靜態(tài)方法,在使用的時候可以直接使用類名進行調(diào)用,而"不用"使用對象來調(diào)用(注意:是"不用”而不是"不能")

常用功能:

返回指定數(shù)組的內(nèi)容的字符串表示形式,通過toString方法。

  1. public static void main(String[] args) {
  2. int[] arrays = {9,5,8,7,100,365,277,25,64};
  3. System.out.println(Arrays.toString(arrays));
  4. }

將指定的int值分配給指定的int數(shù)組的每個元素:通過fill方法。

  1. public static void main(String[] args) {
  2. int[] arrays = {9,5,8,7,100,365,277,25,64};
  3. Arrays.fill(arrays,0);//給數(shù)組里面所有元素替換為0
  4. System.out.println(Arrays.toString(arrays));
  5. //輸出[0, 0, 0, 0, 0, 0, 0, 0, 0]
  6. int[] arr = {9,5,8,7,100,365,277,25,64};
  7. // a - 要填充的數(shù)組
  8. // fromIndex - 要用指定值填充的第一個元素(包括)的索引
  9. // toIndex - 要用指定值填充的最后一個元素(排除)的索引
  10. // val - 要存儲在數(shù)組的所有元素中的值
  11. Arrays.fill(arr,0,5,9);//給數(shù)組里面所有下標范圍替換為9
  12. System.out.println(Arrays.toString(arr));
  13. }

對數(shù)組排序:通過sort方法,按升序。

  1. public static void main(String[] args) {
  2. int[] arrays = {9,5,8,7,100,365,277,25,64};
  3. Arrays.sort(arrays);//數(shù)組進行排序:升序
  4. System.out.println(Arrays.toString(arrays));
  5. //輸出[5, 7, 8, 9, 25, 64, 100, 277, 365]
  6. }

比較數(shù)組:通過equals方法比較數(shù)組中元素值是否相等。

  1. public static void main(String[] args) {
  2. int[] arrays = {9,5,8,7,100,365,277,25,64};
  3. int[] arrays2 = {9,5,8,7,100,365,277,25,64};
  4. boolean flag = Arrays.equals(arrays, arrays2);
  5. System.out.println("arrays和arrays2中的元素比較結(jié)果:"+flag);
  6. }

冒泡排序

冒泡排序算法的運作:

  • 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。比較完最后一對則最后的元素會是最大的數(shù)。
  • 針對所有的元素重復以上的步驟,除了最后一個。
  • 持續(xù)每次對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

代碼示例:

  1. public static void main(String[] args) {
  2. int[] arrays = {9,5,8,7,100,365,277,25,64};
  3. sort(arrays);
  4. }
  5. //冒泡排序:比較相鄰的元素。如果第一個比第二個大,就交換他們兩個的值
  6. public static void sort(int array[]){
  7. //temp是臨時變量,用于比較的值進行交換
  8. int temp = 0;
  9. for (int i = 0; i < array.length-1; i++) {
  10. for (int j = 0; j < array.length-1-i; j++) {
  11. if(array[j]>array[j+1]){
  12. temp = array[j];
  13. array[j] = array[j+1];
  14. array[j+1] = temp;
  15. }
  16. }
  17. }
  18. System.out.println(Arrays.toString(array));
  19. }

以上代碼通過可以通過斷點Debug發(fā)現(xiàn),排序過程中,執(zhí)行完最后的排序后,雖然數(shù)據(jù)已全部排序完備,但程序無法判斷是否完成排序

為了解決這一不足,可設(shè)置一個標志位flag來進行優(yōu)化,將其初始值設(shè)置為false,表示被排序的表是一個無序的表,每一次排序開始前設(shè)置flag值為false,在進行數(shù)據(jù)交換時,修改flag為非true。在新一輪排序開始時,檢查此標志,若此標志為false,表示上一次沒有做過交換數(shù)據(jù),則結(jié)束排序;否則進行排序;

例:

  1. public static void main(String[] args) {
  2. int[] arrays = {9,5,8,7,100,365,277,25,64};
  3. sort(arrays);
  4. }
  5. public static void sort(int array[]){
  6. //temp是臨時變量,用于比較的值進行交換
  7. int temp = 0;
  8. for (int i = 0; i < array.length-1; i++) {
  9. boolean flag = false;
  10. for (int j = 0; j < array.length-1-i; j++) {
  11. if(array[j]>array[j+1]){
  12. temp = array[j];
  13. array[j] = array[j+1];
  14. array[j+1] = temp;
  15. flag = true;
  16. }
  17. }
  18. if(flag==false){
  19. break;
  20. }
  21. }
  22. System.out.println(Arrays.toString(array));
  23. }

稀疏數(shù)組

  • 當一個數(shù)組中大部分元素為0,或者為同一值的數(shù)組時,可以使用稀疏數(shù)組來保存該數(shù)組。
  • 稀疏數(shù)組的處理方式是:
    • 記錄數(shù)組一共有幾行幾列,有多少個不同值
    • 把具有不同值的元素和行列及值記錄在一個小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模
  • 如下圖:左邊是原始數(shù)組,右邊是稀疏數(shù)組

新手初學Java數(shù)組

例:一個有11行11列的五子棋盤,下了黑子和白字和沒下棋子的地方我們可以用不同數(shù)字表示

(0:無)(1:黑)(2:白)

新手初學Java數(shù)組

因為該二維數(shù)組的很多值是默認值0,因此記錄了很多沒有意義的數(shù)據(jù)。我們可以用稀疏數(shù)組來優(yōu)化壓縮

  1. public static void main(String[] args) {
  2. //1.創(chuàng)建一個二維數(shù)組array1 有11行11列 (0:無 1:黑 2:白)
  3. int[][] array1 = new int[11][11];
  4. //根據(jù)示例圖表示,1在第二行第三列,2在第三行第四列
  5. array1[1][2] = 1;
  6. array1[2][3] = 2;
  7. //輸出原始數(shù)組
  8. System.out.println("輸出原始數(shù)組");
  9. for(int[] ints : array1){
  10. for (int anInt : ints){
  11. System.out.print(anInt+"\t");
  12. }
  13. System.out.println();
  14. }
  15. System.out.println("==========================================");
  16. //2.獲取有效值的個數(shù)
  17. int sum = 0;//sum拿來記錄有效個數(shù)
  18. //11為二維數(shù)組的行數(shù)
  19. for (int i = 0; i < 11; i++) {
  20. //11為二維數(shù)組的列數(shù)
  21. for (int j = 0; j <11 ; j++) {
  22. //如果幾行幾列的值不是0,則有效值個數(shù)+1
  23. if(array1[i][j]!=0){
  24. sum++;
  25. }
  26. }
  27. }
  28. System.out.println("有效值的個數(shù):"+sum);
  29. //3.創(chuàng)建一個代表稀疏數(shù)組的數(shù)組array2
  30. //sum+1中的+1是第一行要存放總共幾行幾列幾個有效值的數(shù)據(jù),3列是固定存放行、列、值
  31. int[][] array2 = new int[sum+1][3];
  32. array2[0][0] = 11;//總共多少行
  33. array2[0][1] = 11;//總共多少列
  34. array2[0][2] = sum;//有效值個數(shù)
  35. //4.遍歷二維數(shù)組,將非0的值存放在稀疏數(shù)組中
  36. int count = 0;//記錄行數(shù)
  37. for (int i = 0; i < array1.length ; i++) {
  38. for (int j = 0; j < array1[i].length; j++) {
  39. if (array1[i][j]!=0){
  40. count++;//查找到一個有效值就+1行記錄在稀疏數(shù)組array2中
  41. array2[count][0] = i;//橫坐標
  42. array2[count][1] = j;//縱坐標
  43. array2[count][2] = array1[i][j];//值
  44. }
  45. }
  46. }
  47. System.out.println("輸出稀疏數(shù)組");
  48. System.out.println("行"+"\t"+"列"+"\t"+"值");
  49. for (int i = 0; i < array2.length; i++) {
  50. System.out.println(array2[i][0]+"\t"
  51. +array2[i][1]+"\t"
  52. +array2[i][2]+"\t");
  53. }
  54. System.out.println("==========================================");
  55. //5.把稀疏數(shù)組array2還原為原始數(shù)組array3
  56. //稀疏數(shù)組中array2[0][0]和[0][1]固定存放是總共幾行幾列,array2是11行11列
  57. int[][] array3 = new int[array2[0][0]][array2[0][1]];
  58. //給其中的元素還原它的值,注意i要從1開始,因為array2[0]行存取的是幾行幾列
  59. for (int i = 1; i < array2.length; i++) {
  60. //0是int數(shù)組中的默認值,所以只需要在有效值的位置還原
  61. array3[array2[i][0]][array2[i][1]] = array2[i][2];
  62. }
  63. //打印array3
  64. System.out.println("輸出還原數(shù)組");
  65. for(int[] ints : array3){
  66. for (int anInt : ints){
  67. System.out.print(anInt+"\t");
  68. }
  69. System.out.println();
  70. }
  71. }

結(jié)果:

新手初學Java數(shù)組

總結(jié)

本篇文章就到這里了,希望能夠幫助到你,也希望您能夠多多關(guān)注我們的更多內(nèi)容!

原文鏈接:https://www.cnblogs.com/TriggerBlog/p/14970575.html

延伸 · 閱讀

精彩推薦
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7472021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
主站蜘蛛池模板: 日韩精品欧美 | www.大逼色 | 色一情一乱一伦 | 日韩人成免费网站大片 | 女教师系列三上悠亚在线观看 | 精品国产品香蕉在线观看75 | 亚洲色图网址 | 天天综合天天综合色在线 | 花房乱爱在线观看 | 亚洲欧美日韩另类在线 | 亚洲人成网站在线观看播放青青 | a级影视 | 麻豆天美精东果冻传媒在线 | 国产91在线精品 | 娇妻终于接受了3p的调教 | 国产精品成人va在线观看 | 国产成人愉拍免费视频 | 免费国产好深啊好涨好硬视频 | 饭冈加奈子黑人解禁在线播放 | 亚洲v成人天堂影视 | 青青草国产一区二区三区 | 爱色综合v | 99国产在线视频 | 日韩一区二区三区精品 | www.99精品视频在线播放 | 亚洲精品久久玖玖玖玖 | 色综合合久久天天综合绕视看 | 亚洲日本中文字幕在线2022 | 国产在线99| 国产在线欧美精品 | 亚欧洲乱码视频一二三区 | 免费看日韩 | 秋霞717理论片在线观看 | 国产一区二区视频在线观看 | 91尤物在线 | 亚洲国产精品第一区二区三区 | 精品无人区麻豆乱码无限制 | 四虎最新免费网址 | 亚洲精品成人a | 青草视频久久 | 精品亚洲综合久久中文字幕 |