Java開(kāi)發(fā)必備知識(shí)之?dāng)?shù)組詳解
一、ASCII碼

二、為什么需要數(shù)組
案例: 160班 現(xiàn)在 77人 統(tǒng)計(jì) 全班的Java成績(jī) 用程序進(jìn)行存儲(chǔ) 變量 統(tǒng)計(jì) 全班不及格的同學(xué) 要 補(bǔ)考 補(bǔ)考過(guò)的同學(xué) 修改成績(jī) 定義 77 個(gè)變量 int 帥 = 59; int 洋 = 100; int cto = 60; int ceo = 58;
三、什么是數(shù)組
概念:數(shù)組就是內(nèi)存中一塊 連續(xù)的 內(nèi)存空間,用于存放 相同類(lèi)型 的多個(gè)數(shù)據(jù)
四、定義數(shù)組
聲明一個(gè)數(shù)組:確定數(shù)組中存放的數(shù)據(jù)類(lèi)型
語(yǔ)法:
數(shù)據(jù)類(lèi)型[] 數(shù)組名;//建議
數(shù)據(jù)類(lèi)型 []數(shù)組名;
數(shù)據(jù)類(lèi)型 數(shù)組名[];//c語(yǔ)言的寫(xiě)法 不建議
案例:
//聲明一個(gè)數(shù)組
int[] a ;
為數(shù)組開(kāi)辟空間:確定了數(shù)組的容量大小
語(yǔ)法:數(shù)組名 = new 數(shù)據(jù)類(lèi)型[數(shù)組的長(zhǎng)度];
案例://為數(shù)組開(kāi)辟空間
a = new int[77];
數(shù)組的長(zhǎng)度:自動(dòng)獲取數(shù)組的長(zhǎng)度 數(shù)組名.length
數(shù)組的下標(biāo):為每個(gè)數(shù)組的元素分配一個(gè)標(biāo)號(hào) 0------數(shù)組名.length-1
數(shù)組的元素:數(shù)組中每個(gè)小空間叫做數(shù)組的一個(gè)元素相當(dāng)于一個(gè)變量
定義數(shù)組的其他方式
第一種:聲明 開(kāi)辟空間(隱式)
1)先聲明 后開(kāi)辟空間
語(yǔ)法:
數(shù)據(jù)類(lèi)型[] 數(shù)組名;//聲明
數(shù)據(jù)名 = new 數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度];//開(kāi)辟空間
2)聲明的同時(shí)并開(kāi)辟空間
語(yǔ)法:數(shù)據(jù)類(lèi)型[] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[數(shù)組長(zhǎng)度];
第二種:聲明 賦值(顯式初始化)
1)先聲明 后賦值
語(yǔ)法:
數(shù)據(jù)類(lèi)型[] 數(shù)組名 ;//聲明
數(shù)組名 = new 數(shù)據(jù)類(lèi)型[]{元素1,元素2,元素3,。。。};//賦值
2)聲明的同時(shí)并賦值
語(yǔ)法:數(shù)據(jù)類(lèi)型[] 數(shù)組名 = new 數(shù)據(jù)類(lèi)型[]{元素1,元素2,元素3,。。。};
簡(jiǎn)寫(xiě)形式:數(shù)據(jù)類(lèi)型[] 數(shù)組名 = {元素1,元素2,元素3,。。。};
注意:
1.簡(jiǎn)寫(xiě)形式不能分為兩行 數(shù)組的聲明和賦值必須在同一行
2.在定義數(shù)組的過(guò)程中 不能既賦值同時(shí)又定義長(zhǎng)度
五、使用數(shù)組
存數(shù)據(jù):為每個(gè)元素賦值
取數(shù)據(jù):
語(yǔ)法:數(shù)組名[數(shù)組下標(biāo)] = 值;
案例:
public class Demo{
public static void main(String[] args) {
//聲明一個(gè)數(shù)組
int[] a ;
//為數(shù)組開(kāi)辟空間
a = new int[4];
//存數(shù)據(jù)
a[0] = 2;
a[1] = 4;
a[2] = 6;
a[3] = 8;
//訪問(wèn)數(shù)據(jù)
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
//獲取數(shù)組的長(zhǎng)度
System.out.println("數(shù)組的長(zhǎng)度:"+a.length);
}
}
六、數(shù)組的默認(rèn)值
當(dāng)定義一個(gè)數(shù)組沒(méi)有為數(shù)組賦值數(shù)組的每一個(gè)元素都有一個(gè)默認(rèn)值 默認(rèn)值的類(lèi)型和數(shù)組的類(lèi)型是相關(guān)的
簡(jiǎn)單數(shù)據(jù)類(lèi)型
byte--------------0
short-------------0
int -------------0
long--------------0
float ------------0.0
double------------0.0
char-------------空字符 '\u0000'
boolean----------false
引用數(shù)據(jù)類(lèi)型(對(duì)象類(lèi)型)------null
案例:
public class Demo{
public static void main(String[] args) {
//定義一個(gè)數(shù)組
String[] a = new String[5];
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
System.out.println(a[4]);
}
}
七、數(shù)組的遍歷
遍歷:訪問(wèn)數(shù)組中的每個(gè)元素并打印
案例:
public class Demo{
public static void main(String[] args) {
int[] a = {3,5,6,7,8,3,23,56,78,52,34};
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
}
}
八、數(shù)組在內(nèi)存中的分析
int[] a = new int[4];
a的引用指向 數(shù)組在堆內(nèi)存中的實(shí)體 (見(jiàn)圖示)
元素的地址值 = 首地址+數(shù)據(jù)類(lèi)型字節(jié)數(shù)*下標(biāo)
案例:
public class Demo{
public static void main(String[] args) {
int[] a = new int[3];
a[0] = 2;
a[1] = 3;
a[2] = 5;
int[] b = new int[4];
b = a;
System.out.println("b數(shù)組的長(zhǎng)度:"+b.length);
System.out.println("a數(shù)組的長(zhǎng)度:"+a.length);
for(int i =0;i<b.length;i++){
System.out.print(b[i]+" ");
}
}
}
九、數(shù)組的擴(kuò)容
思想:
1.定義一個(gè)新的數(shù)組 容量要比之前的數(shù)組大
2.將原數(shù)組中的元素 復(fù)制到新數(shù)組中
3.將原數(shù)組的引用指向新數(shù)組
注意:如果超出了數(shù)組的下標(biāo) 那么會(huì)報(bào)異常
java.lang.ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
方法:
=========================================================================================
第一種:自己寫(xiě)
代碼:
public class Demo{
public static void main(String[] args) {
int[] a = {2,4,6,3,7,5,23};//7
System.out.println("擴(kuò)容之前的長(zhǎng)度:"+a.length);
//1,定義一個(gè)新數(shù)組
int[] b = new int[a.length*2];
//2,將原數(shù)組元素復(fù)制到新數(shù)組中
for(int i = 0;i<a.length;i++){
b[i] = a[i];
}
//3 將a的引用指向新數(shù)組
a = b;
//遍歷a數(shù)組
System.out.println("擴(kuò)容之后的長(zhǎng)度:"+a.length);
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
=================================================================
第二種:利用 System.arraycopy(原數(shù)組名,原數(shù)組的起始下標(biāo),新數(shù)組名,新數(shù)組的起始下標(biāo),要復(fù)制的長(zhǎng)度)
代碼:
public class Demo{
public static void main(String[] args) {
int[] a = {2,4,6,3,7,5,23};//7
System.out.println("擴(kuò)容之前的長(zhǎng)度:"+a.length);
//1,定義一個(gè)新數(shù)組
int[] b = new int[a.length*2];
//2,將原數(shù)組元素復(fù)制到新數(shù)組中
System.arraycopy(a,0,b,0,a.length);
/*for(int i = 0;i<a.length;i++){
b[i] = a[i];
}
*/
//3 將a的引用指向新數(shù)組
a = b;
//遍歷a數(shù)組
System.out.println("擴(kuò)容之后的長(zhǎng)度:"+a.length);
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
==================================================================
第三種:利用Arrays工具類(lèi) 操作
Arrays是java.util包中的一個(gè)工具類(lèi)
Arrays.copyOf(原數(shù)組,擴(kuò)容之后的長(zhǎng)度) 此函數(shù)可以返回一個(gè)新的擴(kuò)容之后的數(shù)組數(shù)組長(zhǎng)度由函數(shù)的第二個(gè)參數(shù)決定
代碼:
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {2,4,6,3,7,5,23};//7
System.out.println("擴(kuò)容之前的長(zhǎng)度:"+a.length);
a = Arrays.copyOf(a,a.length*2);
System.out.println("擴(kuò)容之后的長(zhǎng)度:"+a.length);
//遍歷
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
練習(xí):隨機(jī)點(diǎn)名系統(tǒng)
import java.util.*;
public class Demo{
public static void main(String[] args) {
String[] s = {"",""};
//系統(tǒng)隨機(jī)產(chǎn)生一個(gè)下標(biāo)
int index = (int)(Math.random()*s.length);
System.out.println(s[index]);
}
}
案例:隨機(jī)賦值
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = new int[10];
//循環(huán)賦值
for(int i = 0;i<a.length;i++){
a[i] = (int)(Math.random()*100);
}
//遍歷
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
十、數(shù)組用在函數(shù)的參數(shù)上
案例:寫(xiě)一個(gè)函數(shù) 函數(shù)的功能是遍歷數(shù)組 形參類(lèi)型 數(shù)組類(lèi)型 參數(shù)幾個(gè) 1 返回值 void printArray
代碼:
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {3,4,56,7,8,8,9,9,3,5,66,77,88};
printArray(a);
System.out.println();
int[] b = new int[10];
printArray(b);
}
//
public static void printArray(int[] a) {
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
}
數(shù)組用在函數(shù)的參數(shù)和返回值上
案例:寫(xiě)一個(gè)函數(shù) 實(shí)現(xiàn)數(shù)組的擴(kuò)容
代碼:
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {3,4,56,7,8,8,9,9,3,5,66,77,88};
//調(diào)用 擴(kuò)容
a = myCopyOf(a);
printArray(a);
}
//
public static void printArray(int[] a) {
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
//擴(kuò)容數(shù)組
public static int[] myCopyOf(int[] a) {
//定義一個(gè)新數(shù)組
int[] b = new int[a.length*2];
//將原數(shù)組的元素復(fù)制到新數(shù)組
for(int i = 0;i<a.length;i++){
b[i] = a[i];
}
return b;
}
}
案例:定義一個(gè)函數(shù) 函數(shù)的功能是 計(jì)算多個(gè)數(shù)的和 數(shù)不定
代碼:
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {3,4,5};
int sum = add(a);
System.out.println(sum);
}
//定義一個(gè)函數(shù) 實(shí)現(xiàn) 計(jì)算幾個(gè)數(shù)的和
public static int add(int[] a) {
int sum = 0;
for(int i = 0;i<a.length;i++){
sum+=a[i];
}
return sum;
}
}
十一、函數(shù)可變長(zhǎng)參數(shù)
語(yǔ)法: 數(shù)據(jù)類(lèi)型... 變量名
就相當(dāng)于 數(shù)據(jù)類(lèi)型[] 變量名;
public static 返回值類(lèi)型 函數(shù)名(數(shù)據(jù)類(lèi)型... 變量名){
}
注意:可變長(zhǎng)參數(shù)函數(shù)中的形參列表只能有一個(gè)可變長(zhǎng)參數(shù),如果有其他的形參,那么可變長(zhǎng)參數(shù)必須放在參數(shù)列表的最后
案例:
import java.util.*;
public class Demo{
public static void main(String[] args) {
/*int sum1 = add(3,4,5);
int sum2 = add(4,6,9);
int sum3 = add(3,6,8,9,4,3);*/
int sum = add(3,4,6);
System.out.println(sum);
}
//定義一個(gè)可變長(zhǎng)參數(shù)函數(shù)
public static int add(int b,int c,int...a) {
int sum = 0;
for(int i = 0;i<a.length;i++){
sum+=a[i];
}
return sum;
}
}
案例:傳數(shù)組也可以
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {1,2,3};
int sum = add(a);
System.out.println(sum);
}
//定義一個(gè)可變長(zhǎng)參數(shù)函數(shù)
public static int add(int...a) {
int sum = 0;
for(int i = 0;i<a.length;i++){
sum+=a[i];
}
return sum;
}
}
案例:這樣是不行的
import java.util.*;
public class Demo{
public static void main(String[] args) {
int sum = add(2,4,5);
System.out.println(sum);
}
//定義一個(gè)可變長(zhǎng)參數(shù)函數(shù)
public static int add(int[] a) {
int sum = 0;
for(int i = 0;i<a.length;i++){
sum+=a[i];
}
return sum;
}
}
十二、數(shù)組的排序
1.4. 6.8.3 ---- 1 3 4 6 8 套路:算法
十三、冒泡排序
規(guī)則:相鄰的兩個(gè)元素進(jìn)行比較 如果前者大于后者 則兩者交換位置
案例: 3,1,4,2 ------->1 2 3 4
***
**
*
雙重for循環(huán)
代碼:
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {3,5,87,34,67,2,95,36,67,78};
//int[] a = {3,1,4,2};
//冒泡排序
for(int i = 1;i<=a.length-1;i++){
for(int j = 0;j<a.length-i;j++){
if (a[j]>a[j+1]) {
//交換位置
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
//遍歷
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}

選擇排序
規(guī)則:在數(shù)組中選擇一個(gè)數(shù) 和其他的數(shù)進(jìn)行比較 如果這個(gè)數(shù)大于其他的數(shù) 那么兩者交換位置
代碼:
import java.util.*;
public class Demo{
public static void main(String[] args) {
int[] a = {3,5,87,34,67,2,95,36,67,78};
//int[] a = {3,1,4,2};
//冒泡排序
/*for(int i = 1;i<=a.length-1;i++){
for(int j = 0;j<a.length-i;j++){
if (a[j]<a[j+1]) {
//交換位置
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}*/
//選擇排序
for(int i = 0;i<=a.length-2;i++){
for(int j = i+1;j<a.length;j++){
if (a[i]>a[j]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
//遍歷
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}

快速排序
jdk提供的屬于java.util中的Arrays工具類(lèi)的函數(shù)
java.util.Arrays.sort(a);
代碼:
public class Demo{
public static void main(String[] args) {
int[] a = {3,5,87,34,67,2,95,36,67,78};
//int[] a = {3,1,4,2};
//快速排序
java.util.Arrays.sort(a);
//遍歷
for(int i = 0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
十四、二維數(shù)組
概念:是一維數(shù)組的一維數(shù)組 數(shù)組: 8中基本數(shù)據(jù)類(lèi)型 引用數(shù)據(jù)類(lèi)型 數(shù)組是引用數(shù)據(jù)類(lèi)型 數(shù)據(jù)類(lèi)型[] -----數(shù)組類(lèi)型
二維數(shù)組的定義
數(shù)組的聲明:
語(yǔ)法:
數(shù)據(jù)類(lèi)型[][] 數(shù)組名;
為數(shù)組分配空間
語(yǔ)法:
數(shù)組名 = new 數(shù)據(jù)類(lèi)型[高維數(shù)組長(zhǎng)度][低維數(shù)組長(zhǎng)度]
案例:
public class Demo{
public static void main(String[] args) {
int[][] a = new int[4][3];
/*int[] b = new int[4];
b[0] = new int[3];
b[1] = new int[3];
b[2] = new int[3];
b[3] = new int[3];*/
a[0][0] = 1;
a[0][1] = 2;
a[1][2] = 5;
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
二維數(shù)組的遍歷
方法:先遍歷高維 再遍歷低維
代碼:
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
二維數(shù)組的定義的其他方式
第一種:聲明 分配空間
1)先聲明 后分配空間
int[][] a;
a = new int[4][5] //4行5列
2)聲明并分配空間
int[][] a = new int[4][5];
第二種:聲明 賦值
1)先聲明 后賦值
int[][] a ;
a = new int[][]{{2,3,4},{4,5,6},{4,6,8},{3,5,7}}
2)先聲明并賦值
int[][] a =new int[][]{{2,3,4},{4,5,6},{4,6,8},{3,5,7}}
簡(jiǎn)寫(xiě):int[][] a = {{2,3,4},{4,5,6},{4,6,8},{3,5,7}};
注意:簡(jiǎn)寫(xiě)形式不能分為兩行 聲明和賦值必須在同一行
案例:
public class Demo{
public static void main(String[] args) {
//聲明并賦值
int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
不規(guī)則的二維數(shù)組
數(shù)組中每個(gè)元素?cái)?shù)組的長(zhǎng)度是不同的
int[][] a = {{1,2,3,3},{4,5},{7,8,9,8,56},{10,11,12}};
遍歷:
public class Demo{
public static void main(String[] args) {
//聲明并賦值
int[][] a = {{1,2,3,3},{4,5},{7,8,9,8,56},{10,11,12}};
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
注意的問(wèn)題:
1.當(dāng)定義一個(gè)二維數(shù)組 可以先為高維數(shù)組進(jìn)行分配空間,再一一為低維數(shù)組進(jìn)行初始化
案例:
public class Demo{
public static void main(String[] args) {
//聲明并賦值
int[][] a;
a = new int[3][];
a[0] = new int[3];
a[1] = new int[4];
a[2] = new int[5];
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
2.當(dāng)定義一個(gè)二維數(shù)組,必須先為高維分配空間,因?yàn)榈途S數(shù)組是依賴(lài)于高維數(shù)組創(chuàng)建的
案例:
public class Demo{
public static void main(String[] args) {
//聲明并賦值
int[][] a;
a = new int[][4];//錯(cuò)誤的
for(int i = 0;i<a.length;i++){
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
十五、引用之間的傳遞

到此這篇關(guān)于Java開(kāi)發(fā)必備知識(shí)之?dāng)?shù)組詳解的文章就介紹到這了,更多相關(guān)Java數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決spring boot環(huán)境切換失效的問(wèn)題
這篇文章主要介紹了解決spring boot環(huán)境切換失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
springboot使用mybatis一對(duì)多的關(guān)聯(lián)查詢問(wèn)題記錄
這篇文章主要介紹了springboot使用mybatis一對(duì)多的關(guān)聯(lián)查詢問(wèn)題記錄,剛好最近有個(gè)需求需要做到關(guān)聯(lián)的查詢,時(shí)間也算充足,所以用sql來(lái)寫(xiě),于是踩了很久坑,終于跳出來(lái)了,小小記錄一下2022-01-01
Spring BeanFactory和FactoryBean有哪些區(qū)別
這篇文章主要介紹了Spring BeanFactory 與 FactoryBean 的區(qū)別詳情,BeanFactory 和 FactoryBean 的區(qū)別卻是一個(gè)很重要的知識(shí)點(diǎn),在本文中將結(jié)合源碼進(jìn)行分析講解,需要的小伙伴可以參考一下2023-02-02
淺談Maven 項(xiàng)目中依賴(lài)的搜索順序
這篇文章主要介紹了淺談Maven 項(xiàng)目中依賴(lài)的搜索順序,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
java正則表達(dá)式簡(jiǎn)單使用和網(wǎng)頁(yè)爬蟲(chóng)的制作代碼
java正則表達(dá)式簡(jiǎn)單使用和網(wǎng)頁(yè)爬蟲(chóng)的制作代碼,需要的朋友可以參考一下2013-05-05

