Java 数组

1.数组
    用于批量保存一类数据,是引用数据类型之一。

2.数组的默认值
(1) 基本数据类型:
    byte short  int  ----> 0
    long  ----> 0L
    float ----> 0.0F
    double ----> 0.0D
    char ----> '\u0000'
    boolean  ----> false
(2) 引用数据类型:
    类(class)
    接口(interface)
    数组([])

3. 一维数组
(1) 声明一个数组
int[] scores;  // 首选的方法
或者
String names[];   // 效果相同,但不是首选方法
说明:Java语言中声明数组时不能指定其长度(数组中元素的数)。例如: int a[5];    //非法
(2) 为数组初始化
    ①  静态初始化 : 初始化操作和赋值操作同时进行
        int[] scores = new int[]{1,2,3,4,5};
    ② 动态初始化 : 初始化操作和赋值操作分开进行
        String[] names = new String[5];
        names[0] = "张三";
        names[2] = "李四";
(3) 遍历获取数组元素
    ① 使用普通 for 循环
for(int i = 0; i < names.length; i++){
     System.out.println(names[i]);
}
    ② 使用增强 for 循环      //JDK 1.5 引进了一种新的循环类型,被称为 foreach 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
for(String str : names){
     System.out.println(str);
}
(4) 注意
    ① 无论静态初始化还是动态初始化必须指明长度
    ② 获取数组长度的属性: length
    ③ 数组中每个元素的位置都有索引值(下角标、下标) ,索引值从0开始,到数组的长度 - 1·
(5) 实例1
public class TestArray {
    public static void main(String[] args) {
        //基本数据类型
        int[] a = new int[]{1,3,5,7,9,10};
        //
        for(int i=0;i<a.length;i++){
           System.out.println(a[i]);
        }
        for(int str : a){
            System.out.println(str);
        }
        //引用数据类型
        String[] names = new String[5];
        names[0] = "张三";
        names[2] = "李四";
        for(int i = 0; i < names.length; i++){
            System.out.println(names[i]);
        }
        for(String str : names){
            System.out.println(str);
        }
    }
}
(6) 实例2
public class TestArray {
   public static void main(String[] args) {
      double[] myList = {1.9, 2.9, 3.4, 3.5};
      // 打印所有数组元素
      for (int i = 0; i < myList.length; i++) {
         System.out.println(myList[i] + " ");
      }
      // 计算所有元素的总和
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
         total += myList[i];
      }
      System.out.println("Total is " + total);
      // 查找最大元素
      double max = myList[0];
      for (int i = 1; i < myList.length; i++) {
         if (myList[i] > max) max = myList[i];
      }
      System.out.println("Max is " + max);
   }
}
4.二维数组
(1) 声明一个二维数组
    int[][] arr;
(2) 为二维数组初始化
①静态初始化 :
        int[][]  arr = new int[][]{ {1,2,3}, {4,5,6}, {7,8} };
②动态初始化
        arr = new int[5][];
        arr[1][1] = 15;
        arr[3][4] = 22;
(3) 使用循环遍历数组元素
   ① 使用普通 for 循环
for(int i = 0; i < arr.length; i++){
     for(int j = 0; j < arr[i].length; j++){
         System.out.print(arr[i][j] + "\t");
     }
         System.out.println();
}
    ② 使用增强 for 循环
for(int[] as : arr){
     for(int a : as){
          System.out.print(a + "\t");
     }
     System.out.println();
}

5.Array类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
给数组赋值:通过 fill 方法。
对数组排序:通过 sort 方法,按升序。
比较数组:通过 equals 方法比较数组中元素值是否相等。
查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
具体说明请查看下表:
序号方法和说明
1
public static int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-( 插入点 ) - 1)。
2
public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此 相等 ,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
3
public static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
4
public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

6.数组属性:
(1) 数组的查询
public static void main (String []args){
             int a[] = new int[] {1, 3, 4, 6, 8, 9};
             int x1 = Arrays.binarySearch(a, 5);
             int x2 = Arrays.binarySearch(a, 4);
             int x3 = Arrays.binarySearch(a, 0);
             int x4 = Arrays.binarySearch(a, 10);
             System.out.println("x1:" + x1 + ", x2:" + x2);
             System.out.println("x3:" + x3 + ", x4:" + x4);
 }
(2) 数组的比较
public class TestArray {
    public static void main(String[] args) {
        int arr[] = new int [] {12,85,60,100};
        Arrays.sort(arr);   //升序
        int abc[]=Arrays.copyOf(arr ,2);
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
        for(int i=0;i<abc.length;i++){
            System.out.println(arr[i]);
        }
        System.out.println(arr.equals(abc));
    }
}
(3) 数组的排序
public static void main(String[] args) {
       int arr[] = new int [] {12,85,60,100};
       Arrays.sort(arr);   //升序
       for(int i=0;i<arr.length;i++){
           System.out.println(arr[i]);
      }
}
说明:Java类型的数组排序算法是根据字典排序的,因此,数字在字母前面,大写在小写字母前面。
(4) 数组的复制
    数组容量如果不够用可以使用 Arrays.copyOf() 进行扩容:
    Array.copy(E[] e,newLength);
    其第一个形参指的是需要扩容的数组,后面是扩容后的大小,其内部实现其实是使用了 System.arrayCopy(); 在内部重新创建一个长度为 newLength 类型是 E 的数组。
import java.util.Arrays;  
public class Main {
    public static void main(String[] args) {
        int[] a= {10,20,30,40,50};
        a= Arrays.copyOf(a,a.length+1);
        for(int i=0;i<a.length;i++) {
            System.out.println(a[i]);
        }
    }
}
//默认补 0,输出结果为: 10 20 30 40 50 0
(5) 检查数组中是否包含某值
    Arrays.asList() 将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。
public static void main(String[] args) {
      String[] arr= { "a", "b", "c", "d", "e" };
      boolean b = Arrays.asList(arr).contains("a");
      System.out.println(b);
}
(6) 连接两个数组
    方法一:
public static void main(String[] args) {
   String[] oneArray = getOneArray();
   for (String string : oneArray) {
        System.out.println(string);
     }
}

public static String[] getOneArray() {
     String[] a = { "0", "1", "2" };
     String[] b = { "0", "1", "2" };
     String[] c = new String[a.length + b.length];
     for (int j = 0; j < a.length; ++j) {
      c[j] = a[j];
     }
     for (int j = 0; j < b.length; ++j) {
      c[a.length + j] = b[j];
     }

     return c;
}
    方法二:
public static void main(String[] args) {
         Object[] twoArray = getTwoArray();
         for (Object object : twoArray) {
              System.out.println(object);
         }
     }
      public static Object[] getTwoArray() {
           String[] a = { "0", "1", "2" };
           String[] b = { "0", "1", "2" };
           List<String> aL = Arrays.asList(a);
           List<String> bL = Arrays.asList(b);
           List<String> resultList = new ArrayList<String>();
           resultList.addAll(aL);
           resultList.addAll(bL);
           Object[] result = resultList.toArray();
           return result;
      }
方法三:
public static void main(String[] args) {
         int[] intArray = { 1, 2, 3, 4, 5 };
         int[] intArray2 = { 6, 7, 8, 9, 10 };
         // Apache Commons Lang library
         int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);
         for (int i : combinedIntArray) {
              System.out.println(i);
         }
}
(6) 逆向输出一个数组
public class Test2 {
    public static void main(String[] args){
        int[] test= {1,2,4,5,7};
        for (int i : test) {
            System.out.print(i+" ");
        }
        System.out.println("\n");
        test = Test2.reverse(test);
        for (int i : test) {
            System.out.print(i+" ");
        }
    }

    public static int[] reverse(int[] arr){
        int[] result = new int[arr.length];
        for (int i = 0,j=result.length-1; i < arr.length; i++,j--) {
            result[j] = arr[i];
        }
        return result;
    }
}
(7) 移除数组中的元素(ArrayUtils 工具类在用的时候需要导入相关的jar包: org.apache.commons.lang.ArrayUtils )
public static void main(String[] args) {
      int[] arr= { 1, 2, 3, 4, 5 };
      int[] removed = ArrayUtils.removeElement(arr, 3);//create a new array
      System.out.println(Arrays.toString(removed));
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值