java中的數組

java中的數據結構--數組

import java.util.Arrays;
public class ArraysAndCollections {

/*數組:一種數據結構,表示同一類型的數據的集合,
一個個的數據叫數組的元素,通過數組的下標來對同一數組中的不同元素進行操作.其下標從0開始,
當數組下標越界時會拋出java.lang.ArrayIndexOutOfBondsException異常.
1>在java中數組的類型可以是任意基本數據類型,也可以是其他的引用數據類型.


2>如果不對數組進行初始化,則系統默認爲其初始化,
其中基本數據類型中(byte,short,int,long)整形爲0.(float,double) 浮點類型爲0.0;
boolean 邏輯類型爲false;char字符型爲"\u0000"; 引用數據類型爲null;


3>數組一經創建後其大小不可以改變.


4>數組的實現是基於線性表的的數據結構.其特點是查找速度塊,插入和移除元素速度慢.


5>Arrays類中的構造方法被private修飾(private Arrays() { })
(因此不能創建Arrays對象.通過對象名.方法名來調用其內部方法.Arrays array = new Arrays();是不允許的.)
所以其內部方法都是static方法.可以通過類名.方法名調用.

×>擴展部分:將其反選就可以看到了....
當我們觀察java.util.Arrays中的代碼時,發現import java.lang.reflect.*;???什麼意思,於是乎打開java.lang.reflect.*;
竟然發現了有一個叫做Array的類.public final class Array{},其構造方法也是private Array() { },我們可以看看它是怎麼創造一個數組實例的.


public static Object newInstance(Class<?> componentType, int length)
throws NegativeArraySizeException {
return newArray(componentType, length);
}
*/



//驗證其初始值的測試,
public static void arraystest1(){
int[] array1 = new int[3];//聲明並創建一個int[]數組,長度爲3
array1[0] = 1;//通過下標爲其初始化.
array1[1] = 2;
array1[2] = 3;
//array1[3] = 4;
System.out.println(Arrays.toString(array1));
String[] str = new String[2];
System.out.println(Arrays.toString(str));
byte[] b = new byte[2];
short[] sh = new short[2];
int[] i = new int[2];
long[] l = new long[2];
float[] f = new float[2];
double[] d = new double[2];
boolean[] bs = new boolean[2];
char[] ch = new char[2];
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(sh));
System.out.println(Arrays.toString(i));
System.out.println(Arrays.toString(l));
System.out.println(Arrays.toString(f));
System.out.println(Arrays.toString(d));
System.out.println(Arrays.toString(bs));
System.out.println(Arrays.toString(ch));
}


/*數組中提供的優秀的方法,都是複製*/
public static void arraysTest2(){
int[] nums1 = new int[3];
nums1[0] = 1;
nums1[1] = 2;
nums1[2] = 3;
//1> 輸入一個數組和數組的值查找其在數組中的索引位置.binarySearch();
System.out.println(Arrays.binarySearch(nums1 , 3));//結果爲2.
//2>複製一個數組,那方法就多了^_^.
//複製生成一個新的數組,並使其具有指定的長度,可以截取和增加哦.
int[] nums2 = Arrays.copyOf(nums1, 5);
System.out.println(Arrays.toString(nums2));//結果是[1,2,3,0,0]
//copyOfRange();可以複製指定範圍的內容
nums2 = Arrays.copyOfRange(nums1, 1, 2);
System.out.println(Arrays.toString(nums2));//結果是[2]
int[] nums3 = new int[3];
//System提供的複製方法.
System.arraycopy(nums1, 0, nums3, 0, 2);
System.out.println(Arrays.toString(nums3));//結果[1,2,0]
//從Object繼承來的克隆,生成新的數組,
nums3 = nums1.clone();
System.out.println(Arrays.toString(nums3));//結果[1,2,3]
//當然也可以用循環複製

}

//排序和查找.
public static void arraysTest3(){
int[] arr1 = {40, 30, 20, 50, 10};
arr1 = Arrays.copyOf(arr1, 3);
/*在這裏是用arr1引用的數組{40, 30, 20, 50, 10}產生一個新的數組{40, 30, 20}並將arr1重新指向{40, 30, 20};
而原來的數組對象{40, 30, 20, 50, 10}由於沒有使用的價值被gc回收了.所以這裏並不是改變了原來數組的長度.
*/
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
System.out.println("20在arr1中的索引是:" + Arrays.binarySearch(arr1, 20));
}



//數組中的排序,當要對對象數組進行排序時必須要實現Comparable接口中的compareTo方法,否則出錯.
public static void sortTest(){
Employee e1 = new Employee(1, "小王", 2000);
Employee e2 = new Employee(2, "小王", 4000);
Employee e3 = new Employee(3, "小王", 1200);
Employee e4 = new Employee(4, "小王", 2379);
Employee[] emps = new Employee[4];
emps[0] = e1;
emps[1] = e2;
emps[2] = e3;
emps[3] = e4;
Arrays.sort(emps);
System.out.println(Arrays.toString(emps));
}



public static void main(String[] args) {


arraysTest3();

}



class Employee implements Comparable{

private int id;

private String name;

private double salary;

public Employee() {
super();
}

public Employee(int id, String name, double salary) {
super();
this.id = id;
this.name = name;
this.salary = salary;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getSalary() {
return salary;
}

public void setSalary(double salary) {
this.salary = salary;
}

@Override
public int compareTo(Object o) {
Employee emp = (Employee)o;
return this.getId() - emp.getId();
}


public String toString() {
StringBuffer str = new StringBuffer();
str.append("id:" + this.getId() + " ");
str.append("姓名:" + this.getName() + " ");
str.append("薪水:" + this.getSalary() + " ");
return str.toString();

}

}




}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章