Java中的陣列、是一種簡單的線性資料儲存結構、他用犧牲自動擴充套件大小來換取與集合相比的唯一優勢——查詢效率的提升。Java中的陣列有什麼型別?我們要怎麼定義這些陣列呢?下面跟yjbys小編一起來學習Java陣列定義常用方法吧!
java中有兩種資料型別:
a)引用型別
b)基礎型別
其中基礎型別又有兩種:
b1)數值型別
b2)及布林型別。
陣列——也為java的一個數據型別、歸類為引用型別。本文意圖說清楚兩點:
1、陣列的宣告以及初始化。
2、常用的陣列方法。
補充一點:對於我們常說的二維陣列、多維陣列其實是一維陣列的延伸、這裡暫時只圍繞一維陣列。
【陣列的宣告及初始化】
1、陣列的宣告:
作為一種引用型別、就如我們平常使用引用型別的時候宣告一樣、一般有兩種寫法:
a) type[] arrayName; exp: String[] strArray;
b) type arrayName[]; exp: String strArray[];
第二種源於C的寫法、由於很容易造成混淆、所以現在基本不使用這種宣告方式了。
2、陣列的初始化:
陣列的初始化有兩種:
a) 靜態初始化——陣列大小由系統分配、我們只為陣列每個位置上賦值
String[] strArray1 = {"a", "b", "c", "d", "e"};
String[] strArray2 = new String[]{"a", "b", "c", "d", "e"};//在 new String[]中不能指定String陣列的大小!
b)動態初始化——只指定數值的大小、初始化工作由系統為我們完成(即為陣列的.每個位置賦初始值)
String[] strArray3 = new String[5];//此時String陣列的每個位置上的值都由系統來初始化、使用預設的值""
//我們能做的是動態的為strArray3每個位置上的值進行修改
for (int i = 0; i < th; i++) {
//這裡僅用原始的方法進行賦值。
strArray3[i] = strArray1[i];
}
【陣列的常用方法】
package ulMethods;
import yList;
import ys;
import ections;
import Set;
import ;
import ent;
@SuppressWarnings("all")
public class ArrayUseFulMethoed {
private static int[] intArray = {1, 2, 3, 4, 5};
private static String[] strArray = {"a", "b", "c", "d", "e"};
/**
* 填充元素、比較大小、複製元素
*/
public static void testFillArray(){
//注意字串和物件的不同
Student[] student1 = new Student[4];
Student[] student2 = new Student[4];
tln(ls(student1, student2));//true
(student1, 0, 4, new Student(1,"chy"));
(student2, new Student(1,"chy"));
tln(ls(student1, student2));//false
String[] str1 = new String[4];
String[] str2 = new String[]{"a", "a", "a", "a"};
String[] str3 = {new String("a"), new String("a"), new String("a"), new String("a")};
(str1, "a");
tln(ls(str1, str2));//true
tln(ls(str2, str3));//true
String[] str4 = Of(str1, 2);//是將傳入的陣列拷貝len個元素到新的陣列、相當於複製本身的一部分或者全部形成一個全新的陣列
tln(th + "=======" + ring(str4));// 2=======[a, a]
String[] str5 = new String[8];
ycopy(str4, 0, str5, 6, 2);//是將str4從下標0開的2個元素拷貝到從下標6開始放置的陣列str5中
tln(th + "=======" + ring(str5));// 8=======[null, null, null, null, null, null, a, a]
}
/**
* 以字串的形式輸出指定陣列的“模樣”
*/
public static void printOriginalArray(){
String intArrayToString = ring(intArray);
tln(intArrayToString); //result: [1, 2, 3, 4, 5]
}
/**
* 將陣列轉化成List集合
* 注意:不能直接將int[]轉化為集合、因為asList()方法的引數必須是物件。應該先把int[]轉化為Integer[]。
* 對於其他primitive型別的陣列也是如此,必須先轉換成相應的wrapper型別陣列。
*/
public static void convetArrayToList(){
Integer[] integerArray = new Integer[th];
for (int i = 0; i < th; i++) {
integerArray[i] = intArray[i];
}
ArrayList integerList1 = new ArrayList(st(integerArray));
/*
* 不能寫成下面:
* ArrayList integerList2 = (ArrayList)st(integerArray);
* 返回的是List、強轉可以通過編譯、但是不能正常使用。
*/
for(int i : integerList1){
t(i);
}
//result: 12345
tln();
}
/**
* 將List集合轉換成陣列
*/
public static void convetListToArray(){
ArrayList strList = new ArrayList(st(strArray));
String[] strArrayFromList = new String[()];
ray(strArrayFromList);
tln(ring(strArrayFromList)); //result: [a, b, c, d, e]
/*
* 注意:不能寫成這樣:String[] strArrayFromList = (String[])ray(strArrayFromList);會丟擲ClassCastException。
* ray()與ray(T[] t)的區別在於:
* ray()返回的是一個Object[]、不能強轉成String[]、強轉的話可以通過編譯、但是不能進行String[]的操作
* 而ray(T[] t)會將list的值轉換成T型別的陣列。
*/
}
/**
* 將陣列轉換成Set集合
*/
public static void convertArrayToSet(){
Set set = new HashSet(st(strArray));
//Set具有無序性、所以輸出結構不一定是原來陣列元素存放順序
tln(set); //result: [d, e, b, c, a]
}
/**
* 判斷某個陣列中是否包含一個元素、思路:將陣列轉換成list使用list的contains方法
*/
public static void isContainObject(){
ArrayList strList = new ArrayList(st(strArray));
tln(ains("a")); //result: true
//另一種實現
(strArray);
if(rySearch(strArray, "c") >= 0){
tln(true);
}else{
tln(false);
}
}
/**
* 將兩個相同型別的陣列連線起來
*/
public static void connTwoSameArray(){
int[] intArray2 = new int[]{6, 7, 8, 9, 10};
}
/**
* 將陣列中資料排序
*/
public static void sortArray(){
String[] str = {"c", "a" ,"d" ,"z" };
(str);
tln(ring(str));
//反序、
(str, rseOrder());
tln(ring(str));
}
public static void main(String[] args) {
/*printOriginalArray();
convetArrayToList();
convetListToArray();
isContainObject();
convertArrayToSet();
sortArray();*/
testFillArray();
}
}