陣列
創建陣列
-
宣告陣列:
int[] a或者int a[]均可宣告陣列;[] 表示該變數是一個陣列,int 表示陣列里的每一個元素都是一個整數,a 是變數名 -
創建陣列:創建陣列時要指明陣列長度,
new int[5]
public class HelloWorld {
public static void main(String[] args) {
//宣告一個參考
int[] a;
//創建一個長度是5的陣列,并且使用參考a指向該陣列
a = new int[5];
int[] b = new int[5]; //宣告的同時,指向一個陣列
}
}
初始化陣列
前面都只是給陣列分配空間,并沒有進行賦值,下例將陣列進行賦值操作:
- 分配空間與賦值分步
public class HelloWorld {
public static void main(String[] args) {
int[] a = new int[5]; //分配了長度是5的陣列,但是沒有賦值
//沒有賦值,那么就會使用默認值
//作為int型別的陣列,默認值是0
System.out.println(a[0]);
//進行賦值
a[0] = 100;
a[1] = 101;
a[2] = 103;
a[3] = 120;
a[4] = 140;
}
}
- 分配空間與賦值同步
public class HelloWorld {
public static void main(String[] args) {
//寫法一: 分配空間同時賦值
int[] a = new int[]{100,102,444,836,3236};
//寫法二: 省略了new int[],效果一樣
int[] b = {100,102,444,836,3236};
//寫法三:同時分配空間,和指定內容
//在這個例子里,長度是3,內容是5個,產生矛盾了
//所以如果指定了陣列的內容,就不能同時設定陣列的長度
int[] c = new int[3]{100,102,444,836,3236};
}
}
選擇法與冒泡法排序
-
選擇法排序的思路:
- 把第一位和其他所有的進行比較,只要比第一位小的,就換到第一個位置來
比較完后,第一位就是最小的; - 然后再從第二位和剩余的其他所有進行比較,只要比第二位小,就換到第二個位置來
比較完后,第二位就是第二小的,
- 把第一位和其他所有的進行比較,只要比第一位小的,就換到第一個位置來
-
冒泡法排序的思路:
-
從第一位開始,把相鄰兩位進行比較,如果發現前面的比后面的大,就把大的資料交換在后面,回圈比較完畢后,最后一位就是最大的;
-
再來一次,只不過不用比較最后一位,以此類推,
-
-
例子:創建一個長度是5的陣列,并填充亂數,首先用選擇法正排序,然后再對其使用冒泡法倒排序
public class sort{
//創建一個長度是5的陣列,并填充亂數,
//首先用選擇法正排序,然后再對其使用冒泡法倒排序
public static void main(String[] args){
int []a = new int[5];
System.out.println("未排序陣列為:");
for (int i = 0; i <= a.length - 1; i++){
a[i] = (int)(Math.random()*100);//對陣列賦值亂數
System.out.print(a[i]+" ");
}
//選擇法排序
//把第一位和其他所有的進行比較,只要比第一位大的,就換到第一個位置來 ,依次類推
System.out.println("\n" + "選擇法排序后:");
for (int i = 0; i < a.length - 1; i++){
for (int j = i+1; j < a.length; j++){
if (a[i] < a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i <= a.length-1; i++){
System.out.print(a[i] + " ");
}
//冒泡法排序
//從第一位開始,把相鄰兩位進行比較,如果發現前面的比后面的大,就把大的資料交換在后面,
//回圈比較完畢后,最后一位就是最大的 ,依此類推,只不過不用比較最后一位
System.out.println("\n" + "冒泡法排序后:");
for (int i = 0; i < a.length; i++){
for (int j = 0; j < a.length-i-1; j++){
if (a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (int i = 0; i <= a.length-1; i++){
System.out.print(a[i] + " ");
}
// 增強型for回圈可遍歷陣列
// for (int i : a)
// System.out.print(i + " ");
}
}
二維陣列
public class HelloWorld {
public static void main(String[] args) {
//初始化二維陣列,
int[][] a = new int[2][3]; //有兩個一維陣列,每個一維陣列的長度是3
a[1][2] = 5; //可以直接訪問一維陣列,因為已經分配了空間
//只分配了二維陣列
int[][] b = new int[2][]; //有兩個一維陣列,每個一維陣列的長度暫未分配
b[0] =new int[3]; //必須事先分配長度,才可以訪問
b[0][2] = 5;
//指定內容的同時,分配空間
int[][] c = new int[][]{
{1,2,4},
{4,5},
{6,7,8,9}
};
}
}
Arrays
- 陣列復制:
Arrays.copyOfRange方法進行陣列復制,copyOfRange只需要源陣列就就可以了,通過回傳值,就能夠得到目標陣列了,除此之外,需要注意的是copyOfRange的第3個引數,表示源陣列的結束位置,是取不到的, - 轉為字串:
Arrays.toString,直接把一個陣列,轉換為字串,這樣方便觀察陣列的內容, - 排序:
Arrays.sort可直接排序, - 搜索:
Arrays.binarySearch可查找元素所在位置,使用binarySearch之前,必須先使用sort進行排序,且如果陣列中有多個相同的元素,查找結果是不確定的, - 判斷是否相同:
Arrays.equals, - 填充:
Arrays.fill可使用同一個值,填充整個陣列 ,
import java.util.Arrays;
public class arrays {
public static void main(String[] args) {
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
int b[] = new int[] { 18, 62, 68, 82, 65, 8 };
// copyOfRange(int[] original, int from, int to)
// 第一個引數表示源陣列
// 第二個引數表示開始位置(取得到)
// 第三個引數表示結束位置(取不到)
int[] c = Arrays.copyOfRange(a, 0, 3);
System.out.println(Arrays.toString(c));//輸出[18, 62, 68]
//排序
System.out.println("排序之前 :");
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println("排序之后:");
System.out.println(Arrays.toString(a));
//搜索
System.out.println("68出現的位置是:" + Arrays.binarySearch(a, 68));
//判斷
System.out.println(Arrays.equals(a, b));
//填充
int d[] = new int[10];
Arrays.fill(d, 5);//陣列c全填充為5
System.out.println(Arrays.toString(d));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183592.html
標籤:Java
