JAVA學習第四課(數組),java學習數組

來源:互聯網
上載者:User

JAVA學習第四課(數組),java學習數組
數組:

同一類型資料的集合,即一種容器。

定義方式:

int[] atrr = new int[5];//int 型數組 數組名arr ,new動態開闢  int[5],數組大小為5,只能存放5個元素,

下標0-4


數組定義後在記憶體中的基本分布:

記憶體的劃分:

1.寄存器 -> CPU

2.本地方法區,與所在系統相關

3.方法區

4.棧記憶體:
       儲存的都是局部變數,且變數所屬的範圍一旦結束,當前變數就會自動釋放,所以
       棧記憶體更新速度很快,因為棧內變數的生命週期都很短(結束就釋放)。
例如:局部代碼塊,其限定局部變數的生命週期,在某些大程式裡,main函數不結束

其中的變數就不釋放,所以引用局部代碼塊。

範例程式碼:

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;public class Main {public static void main(String[] args){int[] arr = new int[6];System.out.println(arr[1]);{//局部代碼塊,在{}中age有效,{}執行玩age自動釋放int age = 3;System.out.println(age);}System.out.println();}}

5.堆記憶體:、

堆中儲存的是對象(數組),凡是new建立的都在堆中,堆不會隨時釋放,堆中儲存實體,實體中裝載資料,資料中一個損壞,其他的資料依然可以用。而棧一個資料損毀,其他的都不使用

特點:

1.堆中每一個實體都有首地址值。


2.堆記憶體中每一個局部變數都有預設的初始化值,根據類型的不同,初始化值也不同,例如:int型是0,float 是0.0f\0.0,boolean 是false,char 比較特殊 '\u0000',\u  轉義,unicode

3.釋放方式:記憶體回收機制

                                                    x = y;


null:


當不想使用arr實體時,arr是數組,若想讓arr不做任何實體指向,arr = null,但是堆不會釋放arr的地址,


將其視作垃圾。堆裡面的垃圾是在不定時自動回收垃圾,故java在記憶體管理方面優於C++。

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;public class Main {public static void main(String[] args){int[] arr = new int[]{1,1,1,1,1,1};System.out.println(arr[1]);arr = null;//當引用型變數沒有任何實體指向時,還引用該實體,就會引發異常System.out.println(arr[2]);}}

數組使用小練習:

import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;public class Main {public static void main(String[] args){int[] arr = new int[5];int [] b = new int[5];arr[0] = 5;b[0] = 6;b[3] = 15;System.out.println("arr[0] = "+arr[0]);System.out.println("arr[3] = "+arr[3]);arr = b;//更改arr的指向System.out.println("arr[0] = "+arr[0]);System.out.println("arr[3] = "+arr[3]);System.out.println("b[3] = "+b[3]);System.out.println("b[0] = "+b[0]);b = null;//b無指向System.out.println("arr[0] = "+arr[0]);System.out.println("arr[3] = "+arr[3]);//System.out.println("b[3] = "+b[3]);以視為垃圾//System.out.println("b[0] = "+b[0]);}}


使用數組容易遇見的小問題


import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;public class Main {public static void main(String[] args){int[] arr = new int[5];int [] b = new int[5];System.out.println(arr);//[I@15db9742,15db9742是arr儲存的雜湊值,[->數組,I -> int型//所以,在我們不知道,當前實體是什麼類型的實體時,就可以直接當前該實體的名字}}


數組的另一種定義方式:

格式2:已知數組元素,只是需要一個容器來儲存


public class Main {public static void main(String[] args){int[] arr = new int[5];//int[] b = new int[]{1,2,3,4,5};同下int b[] = {1,2,1,3,4,7,8,9,4,1,2,5,6,7,4,5,1,2,3,6};//同上int len = b.length;for(int i = 0;i<len;i++){System.out.println("b["+i+"]= "+b[i]);}}}


數組練習:

進位轉換

import java.awt.print.Printable;import java.util.Arrays;import java.util.Scanner;import javax.swing.text.DefaultEditorKit.InsertBreakAction;import org.omg.CosNaming.NamingContextExtPackage.AddressHelper;/* 需求: * 擷取一個整數的X進位的表現形式 * */public class Main {public static void main(String[] args){Scanner cin = new Scanner(System.in);int num = cin.nextInt();int ary[] = new int[8];getx(num,ary,15,4);//16進位System.out.println("16進位表現形式如下:");print(ary);int bry[] = new int[12];int num1 = cin.nextInt();getx(num1,bry,7,3);//8進位System.out.println("8進位表現形式如下:");print8(bry);System.out.println("6的2進位表現形式如下:");System.out.println(Integer.toBinaryString(6));System.out.println("-6的2進位表現形式如下:");System.out.println(Integer.toBinaryString(-6));cin.close();}public static void print(int[] ary){int i;for(i = 7;i>=0;i--){if(ary[i]!=0)break;}for(int j = i;j>=0;j--){if(ary[j]>9)switch (ary[j]) {case 10:System.out.print("A");break;case 11:System.out.print("B");break;case 12:System.out.print("C");break;case 13:System.out.print("D");break;case 14:System.out.print("E");break;case 15:System.out.print("F");break;default:break;}else {System.out.print(ary[j]);;}}System.out.println();}public static void print8(int bry[]){int i;for(i = 10;i>=0;i--){if(bry[i]!=0)break;}for(int j = i;j>=0;j--){System.out.print(bry[j]);}System.out.println();} public static void getx(int num,int ary[],int mod,int wz){int l = 0;for(int i = 0;i<8;i++){int t = num & mod;//16進位的最大值ary[l++] = t;num = num >>> wz;//4個二進位位表示一個16進位位}}}



JAVA學習中數組這章該怎學

你現在只能說掌握熟悉一下。想運用自如的話 只能等你以後做些小項目或
寫點小程式用到的時候 才會領悟到的。

你簡單點就把它當成一個可以裝很多值的盒子,而這個盒子裝東西
是有順序的。
所以從盒子裡面拿東西(也就是取值)出來就需按照指定的“索引”來取。

就算現在不懂也沒關係,只要你知道有這個東西就可以了。我原來學的時候也不知道 學完還忘記了。 不過過了一段時間 用到的時候 就領悟了。
 
java中有數組a{1,2,3,4}與數組b{3,4,5},現在需要對b數組進行更新同步

按你的要求, 最後b中的元素肯定和a中的元素相同, 但是你又不允許直接把a中的元素賦給b中
下面的代碼可以實現, 你自己看吧, 有注釋

import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Test { /** * @param args */ private List<Integer> asList(int[] i) { List<Integer> list = new ArrayList<Integer>(); for (int t : i) { list.add(t); } return list; } public static void main(String[] args) { // TODO Auto-generated method stub Test t = new Test(); int[] a = { 1, 2, 3, 4}; int[] b = { 3, 4, 5 }; List<Integer> listA = t.asList(a); List<Integer> listB = t.asList(b); for (int i : listA) {//遍曆a, 對於a中每個元素 if(!listB.contains(i)){//如果b中沒有, 添加到b中 listB.add(i); } } for(Iterator<Integer> it = listB.iterator(); it.hasNext();){//遍曆b中的每個元素 int i = it.next(); if(!listA.contains(i)){//如果a中沒有, 從b中刪除 it.remove(); } } System.out.println("a : " + listA); System.out.println("b : " + listB); }}
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.