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基础-基础语法-数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大学计算机基础超详细知识点(高手总结),
- 下一篇: java读取文件指定内容_Java读取文