Java深入淺出數(shù)組的定義與使用上篇
一、數(shù)組的基本用法
1.什么是數(shù)組
數(shù)組:存儲(chǔ)一組相同數(shù)據(jù)類型的數(shù)據(jù)的集合。
2.定義數(shù)組?
int[] :int類型數(shù)組?
double[] :double類型數(shù)組
通過類型就可以定義變量,比如:
int[] array,array就是這個(gè)類型的變量,這個(gè)變量是存儲(chǔ)一組相同數(shù)據(jù)的變量。
三種數(shù)組定義的方式:

第一種:
int[] array = {1,2,3,4,5,6};定義一個(gè)數(shù)組且初始化?
雖然沒寫new,但實(shí)際上也是一個(gè)對(duì)象
注意事項(xiàng):
int[10] array =??{1,2,3,4,5,6};寫法錯(cuò)誤,int[] 屬于類型,中括號(hào)里面不能加任何的數(shù)字,相當(dāng)于在這里破壞了它的類型。
第二種:
int[] array2 = new int[3];

?定義數(shù)組未初始化
第三種:
int[] array3 = new int[]{1,2,3,4,5,6};

定義且初始化?
三種當(dāng)中用的最多的就是第一種
3.數(shù)組的使用
獲取數(shù)組長(zhǎng)度:

Java里面可以直接通過數(shù)組名array.length?求出當(dāng)前數(shù)組的長(zhǎng)度
訪問數(shù)組元素:

訪問數(shù)組下標(biāo)為4的元素?
越界訪問數(shù)組元素:

?Java語言越界直接報(bào)錯(cuò)
更改數(shù)組元素:

?通過數(shù)組名中括號(hào)的方式,不僅僅可以訪問下標(biāo)的內(nèi)容,也可以往下標(biāo)里面寫一些數(shù)據(jù)?
打印數(shù)組:?
第一種:(for循環(huán))

?第二種:(增強(qiáng)for循環(huán),for each循環(huán))

for循環(huán)和for each循環(huán)的區(qū)別:
for循環(huán)是可以拿到下標(biāo)的,
for each循環(huán)是拿不到下標(biāo)的,更多的是用于集合中
第三種:借助Java的操作數(shù)組工具類 Arrays

二、數(shù)組作為方法的參數(shù)
基本用法
JVM簡(jiǎn)單介紹


?局部變量在內(nèi)存中的儲(chǔ)存:

引用不指向?qū)ο髮懛ǎ?/p>

這個(gè)引用不指向任何的對(duì)象

一個(gè)引用能不能同時(shí)指向多個(gè)對(duì)象嗎??

對(duì)于這個(gè)代碼來說只能指向一個(gè)對(duì)象,存一個(gè)對(duì)象的地址。最終只保存了最后一個(gè)對(duì)象的地址?
數(shù)組作為方法的參數(shù)傳遞的過程:

求解打印結(jié)果:
前兩種求解:

fun2打印結(jié)果:

分析例子:下圖代表什么?

代表array2這個(gè)引用,指向了array1這個(gè)引用指向的對(duì)象。
下圖就代表了上面例子的意思:

注意事項(xiàng):
引用指向引用這句話 是錯(cuò)誤的,引用只能指向?qū)ο?/p>
引用一定在棧上嗎?
不一定,一個(gè)變量在不在棧上,是你變量的性質(zhì)決定的,如果你就是一個(gè)局部變量,一定是在棧上的。如果不是,例如,實(shí)例成員變量那就不一定就是在棧上的。
三、數(shù)組練習(xí)題
1.交換兩個(gè)變量的值
public class TestDemo {
public static void swap(int[] array){
int tmp = array[0];
array[0] = array[1];
array[1] = tmp;
}
public static void main(String[] args) {
int[] array = {10,20};
System.out.println("交換前: "+array[0]+" "+array[1]);
swap(array);
System.out.println("交換后: "+array[0]+" "+array[1]);
}
打印結(jié)果:

2.寫一個(gè)方法, 將數(shù)組中的每個(gè)元素都 * 2?
/**
* 在原來的數(shù)組上擴(kuò)大2倍
* @param array
*/
public static void enlarge(int[] array){
for (int i = 0; i <array.length ; i++) {
array[i] = array[i]*2;
}
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
enlarge(array);
System.out.println(Arrays.toString(array));
}
打印結(jié)果:

把原來數(shù)組擴(kuò)大2倍的值放在一個(gè)新的數(shù)組中
/**
* 把原來數(shù)組擴(kuò)大2倍的值放在一個(gè)新的數(shù)組中
* @param array
* @return
*/
public static int[] func(int[] array) {
int[] ret = new int[array.length];
for (int i = 0; i < array.length; i++) {
ret[i] = array[i] * 2;
}
return ret;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
int[] ret = func(array);
System.out.println(Arrays.toString(ret));
}
3.模擬實(shí)現(xiàn)tostring函數(shù)
public static String myToString(int[] array){
String str = "[";
for (int i = 0; i <array.length ; i++) {
str = str+array[i];
if(i != array.length-1){
str+= ",";
}
}
str= str + "]";
return str;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7};
String str = myToString(array);
System.out.println(str);
}
打印結(jié)果:

4.找數(shù)組中的最大元素?
public static int maxNum(int[] array){
if(array == null) return -1;
if (array.length == 0) return -1;
int max = array[0];
for (int i = 1; i <array.length ; i++) {
if(max < array[i]){
max = array[i];
}
}
return max;
}
public static void main(String[] args) {
int[] array = {12,8,14,26,5,7,8};
int max = maxNum(array);
System.out.println(max);
}
打印結(jié)果:

5.查找數(shù)組中指定元素(順序查找)?
public static int findNum(int[] array,int key){
for (int i = 0; i <array.length ; i++) {
if(array[i] == key){
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {2,4,5,6,11,7,8,9};
System.out.println(findNum(array, 7));
}
打印結(jié)果:

6.查找數(shù)組中指定元素(二分查找)?
二分查找的必要條件是必須有序的數(shù)列
public static int binarySearch(int[] array,int key){
int left = 0;
int right = array.length-1;
while(left <= right){
int mid = (left+right)/2;
if(array[mid] > key){
right = mid - 1;
}else if(array[mid] < key){
left = left + 1;
}else{
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {12,14,15,16,18,23};
System.out.println(binarySearch(array, 15));
}
打印結(jié)果:

?總結(jié):
本文簡(jiǎn)單介紹了什么是數(shù)組、數(shù)組的寫法、如何打印數(shù)組、數(shù)組的簡(jiǎn)單使用。通過簡(jiǎn)單例題的方式加深對(duì)數(shù)組的理解。上述就是今天的內(nèi)容,文章哪里出現(xiàn)了問題我都會(huì)積極改正,也希望大家能更快的掌握自己想要的知識(shí),讓我們一起加油?。。。?!
到此這篇關(guān)于Java深入淺出數(shù)組的定義與使用上篇的文章就介紹到這了,更多相關(guān)Java 數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java回調(diào)函數(shù)與觀察者模式實(shí)例代碼
這篇文章主要介紹了Java回調(diào)函數(shù)與觀察者模式實(shí)例代碼,簡(jiǎn)單介紹了使用觀察者模式的場(chǎng)景,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
java實(shí)現(xiàn)數(shù)字轉(zhuǎn)大寫的方法
這篇文章主要介紹了 java實(shí)現(xiàn)數(shù)字轉(zhuǎn)大寫的方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
java實(shí)現(xiàn)坦克大戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)坦克大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
如何解決springboot啟動(dòng)的時(shí)候required a bean of ty
Spring Boot啟動(dòng)失敗,提示缺少`UserDao`類型的Bean,解決方案一:為`UserDao`接口添加`@Mapper`注解,重新啟動(dòng);解決方案二:使用`@MapperScan`注解掃描Mapper接口所在的包2024-12-12
Lombok之@AllArgsConstructor的使用方式
這篇文章主要介紹了Lombok之@AllArgsConstructor的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
javascript checkbox全選和反選的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了javascript checkbox全選和反選的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-05-05

