日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java+数组+列举,Java基础-基础语法-数组

發布時間:2025/3/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java+数组+列举,Java基础-基础语法-数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組簡介:

數組(Array)是Java 語言中內置的一種基本數據存儲結構,通俗的理解,就是一組數的集合,目的是用來一次存儲多個數據。

數組是程序中實現很多算法的基礎,可以在一定程度上簡化代碼的書寫。

備注:

數組的好處:數組里的每個元素都有編號,編號從0開始,并且依次遞增,方便操作這些元素;

使用Java數組:必須先聲明數組,再給該數組分配內存;

數組對應在內存中一段連續空間。

數組元素必須是相同數據類型,也可以是引用數據類型,但是同一個數組中的元素必須是同一類數據類型。

數組的聲明

Java數組有兩種聲明方式:

//數組的兩種聲明方式

int[] a;

int b[];

數組的初始化

Java數組有三種初始化方式:靜態初始化、用new聲明、用new聲明的同時初始化

//靜態初始化

int[] array1 = {4,5,6};

Integer[] b = {

new Integer(1),

new Integer(2),

new Integer(3),

3, //Autoboxing

3 //Autoboxing

};

//用new聲明,之后分別初始化數組中的每個元素,聲明時需指定數組大小

int[] array2 = new int[3];

array2[0] = 1;

array2[1] = 2;

array2[2] = 3;

(注:如果數組元素類型為基本數據類型,在完成new操作之后,數組中的元素會自動初始化為空值,可以直接使用.)

//用new聲明的同時初始化,這種方式不能指定數組的大小,數組大小由初始化列表中數據個數決定

int[] array3 = new int[]{1,2,3};

數組的遍歷

//for循環遍歷

System.out.print("for循環遍歷數組:");

for(int i = 0; i < 3; i++){

System.out.print(" " + arr[i]);

}

//foreach遍歷數組

System.out.print("foreach循環遍歷數組:");

for(int i: arr){

System.out.print(" " + i);

}

//Lambda表達式

Arrays.stream(arr).forEach(item -> {

System.out.print(item + " ");

});

基本數據類型對應數組中元素的默認值

int數組中元素默認值是:0

float數組中元素默認值是:0.0

double數組中元素默認值是:0.0

char數組中元素默認值是:'\u0000' 0

boolean數組中元素默認值是:false

public static void main(String[] args) {

byte arrByte[] = new byte[1];

for (int i = 0; i < arrByte.length; i++) {

System.out.println("arrByte ==> "+arrByte[i]);

}

short arrShort[] = new short[1];

for (int i = 0; i < arrShort.length; i++) {

System.out.println("arrShort ==> "+arrShort[i]);

}

int arrInt[] = new int[1];

for (int i = 0; i < arrInt.length; i++) {

System.out.println("arrInt ==> "+arrInt[i]);

}

long arrLong[] = new long[1];

for (int i = 0; i < arrLong.length; i++) {

System.out.println("arrLong ==> "+arrLong[i]);

}

float arrFloat[] = new float[1];

for (int i = 0; i < arrFloat.length; i++) {

System.out.println("arrFloat ==> "+arrFloat[i]);

}

double arrDouble[] = new double[1];

for (int i = 0; i < arrDouble.length; i++) {

System.out.println("arrDouble ==> "+arrDouble[i]);

}

boolean arrBoolean[] = new boolean[1];

for (int i = 0; i < arrBoolean.length; i++) {

System.out.println("arrBoolean ==> "+arrBoolean[i]);

}

char arrChar[] = new char[1];

for (int i = 0; i < arrChar.length; i++) {

System.out.println("arrChar ==> "+arrChar[i]);

}

}

多維數組

二維數組:(其實是一個一維數組,它的每一個元素又是一個一維數組),

可以看做是一張表格。

初始化分為動態初始化和靜態初始化

動態初始化

int[][] arr = new int[3][2];

定義了一個二維數組,其中有3個一維數組,每一個一維數組中有2個元素

靜態初始化

int[][] arr = new int{{1,2},{3,4},{5,6}};

int[][] arr = {{1,2},{3,4},{5,6}};

數組操作

判斷數組是否重復

求最大最小值

數組排序

數組的內存分配

分配內存空間

數組名=new 數據類型[數組長度];

解釋:new關鍵字用來實現為數組或對象分配內存;數組具有固定的長度。獲取數組的長度: 數組名.length

定義數組+分配內存空間

數據類型[]數組名=new 數據類型[數組長度];

解釋:定義數組時不指定長度,分配空間時指定數組長度;如:String cities[] = new String[6];

數組元素

獲取數組元素:數組名[下標值];

數組下標從0開始 比如:scores[0]=75;

數組的內存分配 棧內存和堆內存

解釋:如定義一個數組 int[]scores將在棧內存中為scores 分配內存空間,其值是一個不確定的值。

當執行語句scores=new int[5]時,將在堆內存分配連續5個空間,每個空間4個字節,用于存放整型數據,其初始值為0,然后將該段空間首地址,也就是第一個元素的地址,比如0*3000,賦給scores變量。該地址相當于一個指針,指向堆內存中分配的空間。此時堆內存中分配的5個空間可以分別使用scores[0],一直到scores[4]來表示。當執行四個賦值語句時,分別用指定值填充到對應元素位置。如果此時將null值賦給scores時,scores變量將不再指向任何位置,此時堆內存中分配的空間就變成了垃圾,由垃圾回收器在某一時間進行回收。

在方法中定義的變量,包括基本數據類型變量和引用數據類型變量,都將在棧內存中分配空間,當超過變量作用范圍后,自動回收。

操作數組的工具類-Arrays

static int binarySearch(type[] a, type key) /*使用二分搜索法來搜索key元素在數組中的索引;若a數組不包括key,返回負數。

(該方法必須已按升序排列后調用)。 */

static int binarySearch(type[] a, int fromIndex, int toIndex, type key) /*使用二分搜索法來搜索key元素在數組中

從fromIndex到toIndex的索引;若a數組不包括key,返回負數。(該方法必須已按升序排列后調用)。*/

static boolean[] copyOf(type[] original, int newLength) //復制指定的數組見下面備注

static byte[] copyOfRange(type[] original, int from, int to) //將數組的指定范圍復制到一個新數組。

static boolean equals(type[] a, type[] a2) //如果兩個數組長度相等和元素一一相等,則返回 true

static void fill(type[] a, type val) //將a數組所有元素都賦為val。

static void fill(type[] a, int fromIndex, int toIndex, type val) //將a數組從formIndex 到tiondex索引之間的元素都賦為val。

static void sort(type[] a) //sort(int[] arr)對指定的數組按數字升序進行排序。

static void sort(type[] a, int fromIndex, int toIndex) //對指定數組的從formIndex 到tiondex索引之間的元素按數字升序進行排序。

static String toString(type[] a) //返回指定數組內容的字符串表示形式。多個數組元素之間用英文逗號或空格隔開。

動態數組

什么是動態數組

? 數據結構中順序表的物理實現,同類數據元素的集合,在計算機中以連續的地址存儲,大小在創建時決定,但是可以改變。

為什么使用動態數組

? 支持隨機訪問,查詢速度快。但是插入和刪除都需要移動元素,比起鏈表開銷較大。如:java集合類中的ArrayList Vector等

動態數組實現代碼(ArrayList原理)

/**

* 順序表的實現

*/

public class ArrayList {

private Object[] data = null; // data: 用來保存此線性表數據的數組

private int capacity; // capacity: 線性表的容量

private int current; // current: 當前數據的下標

/**

* 初始化為聲明大小,則設置為10。

*/

ArrayList() {

this(10);

}

/**

* 初始化線性表,聲明保存數據的數組大小。

* @param initialSize 順序表的初始化大小

*/

ArrayList(int initialSize) {

if (initialSize >= 0) {

this.capacity = initialSize;

data = new Object[initialSize];

current = 0;

} else {

throw new RuntimeException("初始化大小不能小于0:" + initialSize);

}

}

/**

* 在線性表的末尾添加元素,添加之前確認線性表是否已滿

* @param e 待加入的元素

* @return

*/

public boolean AddElement(E e) {

ensureCapacity();

data[current] = e;

++current;

return true;

}

/**

* 檢查存儲數據的數組容量,如果數組已經滿,則擴充容量;否則不操作。

*/

private void ensureCapacity() {

int index;

if (current == capacity) {

capacity *= 2;

Object[] newData = new Object[capacity];

for(index = 0; index < current; ++index) {

newData[index] = data[index];

}

data = newData;

}

}

/**

* 返回下標為index的元素

* @param index 欲取得元素的下標

* @return

*/

public E get(int index) {

validateIndex(index);

return (E) data[index];

}

/**

*

* @param index 待插入的位置

* @param e 待插入的元素

* @return

*/

public boolean set(int index, E e) {

validateIndex(index);

data[index] = e;

return true;

}

/**

* 驗證下標值是否合法,非法時拋出異常

* @param index 待驗證的下標值

*/

private void validateIndex(int index) {

if (index < 0 || index > current) {

throw new RuntimeException("無效的下標:" + index);

}

}

/**

* 返回當前順序表的大小

* @return

*/

public int size() {

return current;

}

/**

* 在指定位置插入指定元素

* @param index 待插入的位置

* @param e 待插入的元素

* @return

*/

public boolean insert(int index, E e) {

validateIndex(index);

ensureCapacity();

for (int temp = current; temp > index; --temp) {

data[temp] = data[temp - 1];

}

data[index] = e;

return true;

}

/**

* 刪除下標為index元素

* @param index 待刪除元素的下標

* @return

*/

public boolean delete(int index) {

validateIndex(index);

for ( ; index < current - 1; ++index) {

data[index] = data[index + 1];

}

data[current - 1] = null;

--current;

return true;

}

@Override

public String toString() {

String str = "[ ";

for (Object o : data) {

if (o != null) {

str += o + " ";

}

}

str += "]";

return str;

}

}

總結

以上是生活随笔為你收集整理的java+数组+列举,Java基础-基础语法-数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。