coreJava_5——數(shù)組

數(shù)組類型

理解數(shù)組

java中要求數(shù)組元素具有相同的數(shù)據(jù)類型铃诬,及一個數(shù)組這里只能存儲一種數(shù)據(jù)類型的數(shù)據(jù)。
一旦數(shù)組的初始化完成,數(shù)組在內(nèi)存中所占的空間將被固定下來盾剩,數(shù)組的長度不可改變蚁廓。

定義數(shù)組

java支持兩種語法格式來定義數(shù)組:

type[] arrayName;  //推薦
type arrayName; 

數(shù)組是一種引用類型的變量访圃,因此用它定義一個變量僅僅表示定義了一個引用變量,這個引用變量還未指向任何有效的內(nèi)存相嵌,因此定義數(shù)組時不能指定數(shù)組的長度腿时,而且沒有內(nèi)存空間來存儲數(shù)組元素况脆,所以只有對數(shù)組進(jìn)行初始化后才可以使用。
注意:定義數(shù)組時不能指定數(shù)組長度

數(shù)組的初始化

數(shù)組的初始化有兩種方式:

  • 靜態(tài)初始化:初始化時由程序員顯式的指定每個數(shù)組元素的初始值批糟,由系統(tǒng)決定數(shù)組長度
  • 動態(tài)初始化:初始化時程序員只指定數(shù)組長度格了,由系統(tǒng)為數(shù)組元素分配初始值
    注意:不能同時使用靜態(tài)初始化和動態(tài)初始化。即徽鼎,不能數(shù)組初始化時及指定長度盛末,又指定初始值

1 靜態(tài)初始化

arrayName = new type[]{element1, element2, element3, ...}

簡化寫法:

//聲明和初始化一起完成
int[] a = {1,2,3,4};

實例:

int[] intArr;
intArr = new int[]{1,2,3,4}
Object[] objArr;
objArr = new Object[]{"你好", "世界"};
objArr = new String[]{"你好", "世界"};

2 動態(tài)初始化

arrayName = new type[length];

簡化寫法:

//數(shù)組的定義和初始化同時完成
int[] a = new int[4];
  • 注意:動態(tài)初始化時,系統(tǒng)為元素分配的初始值為:
    基本類型整數(shù)類型:0
    基本類型浮點類型:0.0
    基本類型字符類型:'\u0000'
    基本類型布爾類型:false
    引用類型(類否淤、接口和數(shù)組):null

內(nèi)存中的數(shù)組

實際的數(shù)組對象被存儲在堆(heap)內(nèi)存中悄但,如果引用該數(shù)組對象的數(shù)組引用變量是一個局部變量那么它被存儲在棧(stack)內(nèi)存中。

  • 注:為什么要分棧內(nèi)存和堆內(nèi)存石抡?
    當(dāng)一個方法執(zhí)行時檐嚣,每個方法都會建立自己的內(nèi)存棧,在這個方法中定義的變量都將會被逐個放入棧內(nèi)存中啰扛,方法執(zhí)行結(jié)束净嘀,這個方法的內(nèi)存棧自然銷毀。因此侠讯,所有在方法中定義的局部變量都是放在棧內(nèi)存中的挖藏。
    在程序中創(chuàng)建一個對象時,這個對象將被保存到運行時數(shù)據(jù)區(qū)中厢漩,以便反復(fù)利用(因為對象的創(chuàng)建成本很大)膜眠,這個運行時數(shù)據(jù)區(qū)就是堆內(nèi)存。堆內(nèi)存中對象不會隨方法結(jié)束而銷毀溜嗜,只有當(dāng)一個對象沒有任何引用變量引用它時宵膨,會變成垃圾,但是長度依然不變炸宵。
    實例:
int[] a = new int[]{1, 2, 3, 4}
int[] b = new int[4];
b = a;
//b = a辟躏,即把數(shù)組a的值賦給b后,就是讓數(shù)組變量b指向數(shù)組變量a所指向的地址土全,而原來堆中數(shù)組b失去引用捎琐,變成垃圾,但長度依然不變

注:對待數(shù)組問題要分成兩部分看待裹匙,一部分是數(shù)組引用瑞凑,即定義的數(shù)組引用變量;一部分是實際的數(shù)組對象概页,在堆內(nèi)存中運行的籽御,通常無法直接訪問它,只能通過數(shù)組引用變量來訪問。

引用類型數(shù)組的初始化

引用類型的數(shù)組技掏,存儲的每一個數(shù)組元素也是引用铃将,指向另一塊內(nèi)存。
代碼示例:

//person.java
package tmp;

public class Person {

    public int age;
    public double height;

    // 定義一個info方法
    public void info() {
        System.out.println("我的年齡是:" + age + "哑梳,我的身高是:" + height);
    }
}

//ReferenceArraryTest.java
package tmp;

public class ReferenceArrayTest {
    public static void main(String[] args) {
        //定義一個students數(shù)組變量麸塞,類型是Person[],并初始化
        Person[] students = new Person[2];
        //創(chuàng)建一個person實例涧衙,并將這個person實例賦給zhang變量
        Person zhang = new Person();
        //為zhang所引用的person對象的age、height賦值
        zhang.age=22;
        zhang.height=184;
        //創(chuàng)建一個person實例奥此,并將這個person實例賦給wang變量
        Person wang = new Person();
        wang.age = 21;
        wang.height=165;
        //將zhang弧哎、wang變量的值分別賦給數(shù)組的元素
        students[0]=zhang;
        students[1]=wang;
        //下面這兩行代碼是等效的,zhang和students[0]指向的是
        //同一個Person實例
        //zhang.info();
        students[0].info();
    }
}

輸出結(jié)果:

我的年齡是:22稚虎,我的身高是:184.0

java8 中的增強(qiáng)工具類:Arrarys

java提供的Arrarys類里包含的一些static修飾的方法可以直接操作數(shù)組撤嫩。
具體可查看api


jdk1.6.png

常用的方法主要是:

  • int binarySearch(type[] a, type key):使用二分法查詢key元素值在a數(shù)組中出現(xiàn)的索引;如果a數(shù)組不包含key元素值蠢终,則返回負(fù)數(shù)序攘。調(diào)用該方法時要求數(shù)組中元素已經(jīng)按升序排列。
  • int binarySearch(type[] a,int fromIndex, int toIndex, type key):跟上一個類似寻拂,但它只搜索a數(shù)組中fromIndex到toIndex索引的元素程奠。調(diào)用該方法時要求數(shù)組中元素已經(jīng)按升序排列。
  • type[] copyOf(type[] original, int length):這個方法將會把original數(shù)組復(fù)制成新數(shù)組祭钉,長度為length瞄沙。如果length小于original數(shù)組的長度,則新數(shù)組就是原數(shù)組的前面length個元素慌核;length大于original數(shù)組的長度距境,則新數(shù)組就是原數(shù)組的所有元素,后面補(bǔ)充相應(yīng)數(shù)據(jù)類型的默認(rèn)值垮卓,如int為0垫桂,boolean為false等
  • copyOfRange、equals粟按、fill诬滩、sort、toString
  • 等等……
    注意:Arrarys類處于 java.util 包下灭将,為了在程序中使用Arrary類碱呼,需要進(jìn)行導(dǎo)包
    實例:
package tmp;

import java.lang.reflect.Array;
import java.util.Arrays;

public class ArrarysTest {
    public static void main(String[] args) {
        // 定義一個a數(shù)組
        int[] a = new int[] { 3, 4, 5, 6 };
        // 定義一個a2數(shù)組
        int[] a2 = new int[] { 3, 4, 5, 6 };
        // a和a2數(shù)組的長度、每個元素順序值均相等宗侦,將輸出true
        System.out.println("a愚臀、a2數(shù)組是否相等:" + Arrays.equals(a, a2));
        // 通過賦值a數(shù)組生成新數(shù)組b
        int[] b = Arrays.copyOf(a, 6);
        System.out.println("a、b數(shù)組是否相等:" + Arrays.equals(a, b));
        System.out.println("b的數(shù)組元素為:" + Arrays.toString(b));
        // 將數(shù)組b的第3個元素到第5個元素賦值為1(區(qū)間前閉后開)
        Arrays.fill(b, 3, 5, 1);
        System.out.println(Arrays.toString(b));
        // 將b數(shù)組進(jìn)行排序
        Arrays.sort(b);
        System.out.println(Arrays.toString(b));
    }
}

運行結(jié)果:
a矾利、a2數(shù)組是否相等:true
a姑裂、b數(shù)組是否相等:false
b的數(shù)組元素為:[3, 4, 5, 6, 0, 0]
[3, 4, 5, 1, 1, 0]
[0, 1, 1, 3, 4, 5]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馋袜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舶斧,更是在濱河造成了極大的恐慌欣鳖,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茴厉,死亡現(xiàn)場離奇詭異泽台,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)矾缓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門怀酷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗜闻,你說我怎么就攤上這事蜕依。” “怎么了琉雳?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵样眠,是天一觀的道長。 經(jīng)常有香客問我翠肘,道長檐束,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任束倍,我火速辦了婚禮厢塘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肌幽。我一直安慰自己晚碾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布喂急。 她就那樣靜靜地躺著格嘁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廊移。 梳的紋絲不亂的頭發(fā)上糕簿,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音狡孔,去河邊找鬼懂诗。 笑死,一個胖子當(dāng)著我的面吹牛苗膝,可吹牛的內(nèi)容都是我干的殃恒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼离唐!你這毒婦竟也來了病附?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亥鬓,失蹤者是張志新(化名)和其女友劉穎完沪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嵌戈,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡覆积,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了熟呛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宽档。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惰拱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啊送,我是刑警寧澤偿短,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站馋没,受9級特大地震影響昔逗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜篷朵,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一勾怒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧声旺,春花似錦笔链、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至澈缺,卻和暖如春坪创,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姐赡。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工莱预, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人项滑。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓依沮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子悉抵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容