1、创建数组
• 数组是相同类型数据的有序集合.相同类型的若干个数据,按照一定先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.
• 数组特点:其长度是确定的。数组一旦被创建,它的大小就是不可以改变的; 其元素必须是相同类型,不允许出现混合类型;数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 一维数组声明: type[] arr_name; type arr_name[]; Java中使用关键字new 创建数组对象
public class Test{ public static void main(String args[]){ int[] s = null; s = new int[10]; for ( int i=0; i<10; i++ ) { s[i] =2*i+1; System.out.println(s[i]); } } }
- 引用数组生成:
1 import java.lang.reflect.Array; 2 3 public class BallGame { 4 5 public static void main(String[] args) { 6 User[] ints = new User[10]; 7 User user1 = new User(10,"13453"); 8 User user2 = new User(100,"xiaoming"); 9 ints[0] = user1; 10 ints[1] = user2; 11 System.out.println(ints[0].age); 12 } 13 } 14 15 class User{ 16 int age ; 17 String name; 18 public User(int age,String name){ 19 this.age = age; 20 this.name = name; 21 } 22 23 }
2、数组初始化
- 静态初始化--->定义的时候直接赋值
public class BallGame { public static void main(String[] args) { //定义数组 int[] ints = {1,2,3,4}; for(int i=0;i<ints.length;i++){ System.out.println(ints[i]); } } }
- 动态初始化:数组定义与为数组元素分配空间并赋值的操作分开进行。
public class BallGame { public static void main(String[] args) { //定义数组 int[] ints = new int[2]; ints[0] = 0; ints[1] = 1; for(int i=0;i<ints.length;i++){ System.out.println(ints[i]); } } }
- 默认初始化-->和成员变量默认赋值一样
3、数组的拷贝
package cn.sxt.array2; /** * 测试数组的拷贝 * @author Administrator * */ public class TestArrayCopy { public static void main(String[] args) { // testBasicCopy2(); String[] str = {"阿里","京东","尚学堂","百度","亚马逊"}; // removeElment(str, 1); str = extendRange(str); } //数组拷贝 public static void testBasicCopy(){ String[] s1 = {"aa","bb","cc","dd","ee"}; String[] s2 = new String[10]; System.arraycopy(s1, 2, s2, 6, 3); for(int i=0;i<s2.length;i++) { System.out.println(i+"--"+s2[i]); } } //测试从数组中删除某个元素(本质上还是数组的拷贝) public static void testBasicCopy2(){ String[] s1 = {"aa","bb","cc","dd","ee"}; // String[] s2 = new String[5]; System.arraycopy(s1, 3, s1, 3-1, s1.length-3); s1[s1.length-1] = null; for(int i=0;i<s1.length;i++) { System.out.println(i+"--"+s1[i]); } } //删除数组中指定索引位置的元素,并将原数组返回 public static String[] removeElment(String[] s, int index){ System.arraycopy(s, index+1, s, index, s.length-index-1); s[s.length-1] = null; for(int i=0;i<s.length;i++) { System.out.println(i+"--"+s[i]); } return s; } //数组的扩容(本质上是:先定义一个更大的数组,然后将原数组内容原封不动拷贝到新数组中) public static String[] extendRange(String[] s1){ // String[] s1 = {"aa","bb","cc"}; String[] s2 = new String[s1.length+10]; System.arraycopy(s1, 0, s2, 0, s1.length); //就将s1中所有的元素拷贝到了s2 for(String temp:s2){ System.out.println(temp); } return s2; } }
4、array工具
package cn.sxt.array2; import java.util.Arrays; /** * 测试java.util.Arrays工具类的使用 * @author Administrator * */ public class TestArrays { public static void main(String[] args) { int[] a = {100,20,30,5,150,80,200}; System.out.println(a); //打印字符串 System.out.println(Arrays.toString(a)); //排序 Arrays.sort(a); System.out.println(Arrays.toString(a)); //二分法查找 System.out.println(Arrays.binarySearch(a, 30)); } }
5、多维数组
- 二维数组
package cn.sxt.array2; /** * 测试二维数组 * @author Administrator * */ public class Test2DimensionArray { public static void main(String[] args) { // int[] a = new int[3]; // Car[] cars = new Car[3]; int[][] a = new int[3][]; a[0] = new int[]{20,30}; a[1] = new int[]{10,15,80}; a[2] = new int[]{50,60}; System.out.println(a[1][2]); //静态初始化二维数组 int[][] b = { {20,30,40}, {50,20}, {100,200,300,400} }; System.out.println(b[2][3]); } } class Car{ }
- 实例
package cn.sxt.array2; import java.util.Arrays; /** * 测试数组存储表格数据 * @author Administrator * */ public class TestArrayTableData { public static void main(String[] args) { Object[] emp1 = {1001,"sfs",18,"讲师","2006.6.6"}; Object[] emp2 = {1002,"sffs",19,"程序员","2016.6.6"}; Object[] emp3 = {1003,"sfsdfs",22,"销售","2026.6.6"}; Object[][] tableData = new Object[3][]; tableData[0] = emp1; tableData[1] = emp2; tableData[2] = emp3; for(Object[] temp: tableData){ System.out.println(Arrays.toString(temp)); } } }
6、冒泡排序
1 package cn.sxt.array2; 2 3 import java.util.Arrays; 4 5 /** 6 * 测试冒泡排序以及优化。 7 * @author Administrator 8 * 9 */ 10 public class TestBubbleSort { 11 public static void main(String[] args) { 12 13 int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5, 8 }; 14 int temp = 0 ; 15 for(int i=0;i<values.length-1;i++){ 16 boolean flag = true; 17 for(int j=0; j<values.length-1-i; j++){ 18 //比较大小,换顺序 19 if(values[j]>values[j+1]){ 20 temp = values[j]; 21 values[j] = values[j+1]; 22 values[j+1] = temp; 23 24 flag = false; 25 } 26 System.out.println(Arrays.toString(values)); 27 } 28 if(flag){ 29 System.out.println("结束!!!"); 30 break; 31 } 32 System.out.println("#########"); 33 34 } 35 36 37 38 39 } 40 }
7、二分法查找
1 package cn.sxt.array2; 2 3 import java.util.Arrays; 4 5 /** 6 * 7 * @author Administrator 8 * 9 */ 10 public class TestBinarySearch { 11 public static void main(String[] args) { 12 int[] arr = { 30,20,50,10,80,9,7,12,100,40,8}; 13 Arrays.sort(arr); 14 15 System.out.println(Arrays.toString(arr)); 16 System.out.println(myBinarySearch(arr, 7)); 17 18 } 19 20 public static int myBinarySearch(int[] arr, int value){ 21 int low = 0; 22 int high = arr.length-1; 23 24 while(low<=high){ 25 int mid = (low+high)/2; 26 27 if(value==arr[mid]){ 28 return mid; 29 } 30 31 if(value>arr[mid]){ 32 low = mid+1; 33 } 34 35 if(value<arr[mid]){ 36 high = mid-1; 37 } 38 39 } 40 41 return -1; 42 } 43 44 45 }