国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - Java教程 - 新手初學Java數組

新手初學Java數組

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

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

什么是數組

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

數組的聲明創建

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

使用new來創建數組的語法:

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

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

獲取數組的長度:array.length

練習:用循環給數組賦值1到10,并輸出數組的總和

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

內存分析:

新手初學Java數組

結合以上練習和這張簡單的內存分析思維導圖來簡單分析一下數組是如何生成在java內存的?

新手初學Java數組

三種初始化狀態

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

數組的默認初始化

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

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

數組的四個基本特點

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

數組的使用

For-Each循環

  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. }

數組作方法入參

  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. //打印數組元素
  6. public static void printArray(int[] arrays){
  7. for(int i = 0; i < arrays.length; i++){
  8. System.out.print(arrays[i]+" ");
  9. }
  10. }

數組作返回值

  1. public static void main(String[] args) {
  2. int[] arrays = {2,4,6,8,10};
  3. //使用for-each遍歷出反轉后的數組
  4. for(int array : reverse(arrays)){
  5. System.out.print(array+" ");
  6. }
  7. }
  8. //反轉數組,從數組最后一個元素到第一個元素
  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. }

多維數組

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

二維數組

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

新手初學Java數組

例:創建并打印二維數組的所有元素

  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類

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

常用功能:

返回指定數組的內容的字符串表示形式,通過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數組的每個元素:通過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);//給數組里面所有元素替換為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 - 要填充的數組
  8. // fromIndex - 要用指定值填充的第一個元素(包括)的索引
  9. // toIndex - 要用指定值填充的最后一個元素(排除)的索引
  10. // val - 要存儲在數組的所有元素中的值
  11. Arrays.fill(arr,0,5,9);//給數組里面所有下標范圍替換為9
  12. System.out.println(Arrays.toString(arr));
  13. }

對數組排序:通過sort方法,按升序。

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

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

  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中的元素比較結果:"+flag);
  6. }

冒泡排序

冒泡排序算法的運作:

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

代碼示例:

  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發現,排序過程中,執行完最后的排序后,雖然數據已全部排序完備,但程序無法判斷是否完成排序

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

例:

  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. }

稀疏數組

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

新手初學Java數組

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

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

新手初學Java數組

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

  1. public static void main(String[] args) {
  2. //1.創建一個二維數組array1 有11行11列 (0:無 1:黑 2:白)
  3. int[][] array1 = new int[11][11];
  4. //根據示例圖表示,1在第二行第三列,2在第三行第四列
  5. array1[1][2] = 1;
  6. array1[2][3] = 2;
  7. //輸出原始數組
  8. System.out.println("輸出原始數組");
  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.獲取有效值的個數
  17. int sum = 0;//sum拿來記錄有效個數
  18. //11為二維數組的行數
  19. for (int i = 0; i < 11; i++) {
  20. //11為二維數組的列數
  21. for (int j = 0; j <11 ; j++) {
  22. //如果幾行幾列的值不是0,則有效值個數+1
  23. if(array1[i][j]!=0){
  24. sum++;
  25. }
  26. }
  27. }
  28. System.out.println("有效值的個數:"+sum);
  29. //3.創建一個代表稀疏數組的數組array2
  30. //sum+1中的+1是第一行要存放總共幾行幾列幾個有效值的數據,3列是固定存放行、列、值
  31. int[][] array2 = new int[sum+1][3];
  32. array2[0][0] = 11;//總共多少行
  33. array2[0][1] = 11;//總共多少列
  34. array2[0][2] = sum;//有效值個數
  35. //4.遍歷二維數組,將非0的值存放在稀疏數組中
  36. int count = 0;//記錄行數
  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行記錄在稀疏數組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("輸出稀疏數組");
  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.把稀疏數組array2還原為原始數組array3
  56. //稀疏數組中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數組中的默認值,所以只需要在有效值的位置還原
  61. array3[array2[i][0]][array2[i][1]] = array2[i][2];
  62. }
  63. //打印array3
  64. System.out.println("輸出還原數組");
  65. for(int[] ints : array3){
  66. for (int anInt : ints){
  67. System.out.print(anInt+"\t");
  68. }
  69. System.out.println();
  70. }
  71. }

結果:

新手初學Java數組

總結

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

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

延伸 · 閱讀

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

    小米推送Java代碼

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

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

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

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

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

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

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

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

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

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

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

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

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

    Java BufferWriter寫文件寫不進去或缺失數據的解決

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

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

    Java使用SAX解析xml的示例

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

    大行者10067412021-08-30
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

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

    littleschemer13532021-05-16
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本一区二区免费在线观看 | 久久精选| 日韩欧美网站 | 久久99蜜桃综合影院免费观看 | 国产综合精品一区二区三区 | 久久亚洲视频 | 三级电影网址 | 一区二区三区精品视频 | 日韩免费 | 国产专区一区二区三区 | 国产精品免费久久久久久久久 | 美女久久 | 久久久久久久久久久久免费 | 亚洲久久 | 在线视频一区二区三区 | 99国产精品久久久久久久成人热 | 亚洲色图88 | 日韩中文字幕一区二区 | 色综合久久天天综合网 | 久久99精品国产麻豆婷婷 | 91精品国产一区二区 | 久久狠狠 | 日韩欧美成人影院 | 日韩欧美一区二区三区免费观看 | 欧美午夜视频 | 午夜视频在线观看网站 | 欧美综合在线观看 | 亚洲精品影院 | 91精品国产91久久久久久 | 国产欧美在线 | 精品一区二区av | 久久午夜网站 | 99久久免费精品国产男女性高好 | 黄网站在线播放 | 亚洲日韩中文字幕一区 | 欧美日韩第一页 | 日精品| 国产成人精品久久二区二区 | 天天摸天天做天天爽 | 黑人精品欧美一区二区蜜桃 | 免费观看黄色大片 |