我是靠谱客的博主 自觉黑夜,最近开发中收集的这篇文章主要介绍【java】数组的基本操作1.使用类库操作数组2.数组基本操作实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.使用类库操作数组

1.1 ArrayUtils

大多数情况下,在处理问题时,使用已经经过单元测试和用户测试的易于获得的库是更快、更安全的,对于数组操作可以利用Commons.lang中的ArrayUtils类实现。

方法功能实例
toString将一个数组转换成String,用于打印数组ArrayUtils.toString(new int[] { 1, 4, 2, 3 });// {1,4,2,3}
ArrayUtils.toString(new Integer[] { 1, 4, 2, 3 });// {1,4,2,3}
ArrayUtils.toString(null, "I'm nothing!");// I'm nothing!
isEquals判断两个数组是否相等,采用EqualsBuilder进行判断// 两个数组完全相同
ArrayUtils.isEquals(new int[] { 1, 2, 3 }, new int[] { 1, 2, 3 });// true
// 数据类型以及长度相同,但各个Index上的数据不是一一对应
ArrayUtils.isEquals(new int[] { 1, 3, 2 }, new int[] { 1, 2, 3 });// true
// 数组的长度不一致
ArrayUtils.isEquals(new int[] { 1, 2, 3, 3 }, new int[] { 1, 2, 3 });// false
// 不同的数据类型
ArrayUtils.isEquals(new int[] { 1, 2, 3 }, new long[] { 1, 2, 3 });// false
ArrayUtils.isEquals(new Object[] { 1, 2, 3 }, new Object[] { 1, (long) 2, 3 });// false
// Null处理,如果输入的两个数组都为null时候则返回true
ArrayUtils.isEquals(new int[] { 1, 2, 3 }, null);// false
ArrayUtils.isEquals(null, null);// true
toMap将一个数组转换成Map// 不支持基本数据类型数组
// ArrayUtils.toMap(new Object[]{new int[]{1,2},new int[]{3,4}})会出异常
ArrayUtils.toMap(new Object[] { new Object[] { 1, 2 }, new Object[] { 3, 4 } });// {1=2, 3=4}
ArrayUtils.toMap(new Integer[][] { new Integer[] { 1, 2 }, new Integer[] { 3, 4 } });//{1=2,3=4}
clone拷贝数组ArrayUtils.clone(new int[] { 3, 2, 4 });// {3,2,4}
subarray截取子数组

// 起始index为2(即第三个数据)结束index为4的数组

ArrayUtils.subarray(new int[] { 3, 4, 1, 5, 6 }, 2, 4);// {1,5}
// 如果endIndex大于数组的长度,则取beginIndex之后的所有数据

ArrayUtils.subarray(new int[] { 3, 4, 1, 5, 6 }, 2, 10);// {1,5,6}

isSameLength判断两个数组长度是否相等ArrayUtils.isSameLength(new Integer[] { 1, 3, 5 }, new Long[] { 2L, 8L, 10L });// true
getLength获得数组的长度ArrayUtils.getLength(new long[] { 1, 23, 3 });// 3
isSameType判段两个数组的类型是否相同ArrayUtils.isSameType(new long[] { 1, 3 }, new long[] { 8, 5, 6 });// true
ArrayUtils.isSameType(new int[] { 1, 3 }, new long[] { 8, 5, 6 });// false
reverse数组反转int[] array = new int[] { 1, 2, 5 };
ArrayUtils.reverse(array);// {5,2,1}
indexOf查询某个Object在数组中的位置,可以指定起始搜索位置,找不到返回-1// 从正序开始搜索,搜到就返回当前的index,否则,返回-1
ArrayUtils.indexOf(new int[] { 1, 3, 6 }, 6);// 2
ArrayUtils.indexOf(new int[] { 1, 3, 6 }, 2);// -1
lastIndexOf反向查询某个Object在数组中的位置,可以指定起始搜索位置// 从逆序开始搜索,搜到就返回当前的index,否则,返回-1
ArrayUtils.lastIndexOf(new int[] { 1, 3, 6 }, 6);// 2
contains查询某个Object是否在数组中ArrayUtils.contains(new int[] { 3, 1, 2 }, 1);// true
// 对于Object数据是调用该Object.equals方法进行判断
ArrayUtils.contains(new Object[] { 3, 1, 2 }, 1L);// false
toObject基本数据类型→外包型ArrayUtils.toObject(new int[] { 1, 2 });// new Integer[]{Integer,Integer}
toPrimitive外包型→基本数据类型ArrayUtils.toPrimitive(new Integer[] { new Integer(1), new Integer(2) });// new int[]{1,2}
isEmpty判断数组是否为空(null和length=0的时候都为空)ArrayUtils.isEmpty(new int[0]);// true
ArrayUtils.isEmpty(new Object[] { null });// false
addAll合并两个数组ArrayUtils.addAll(new int[] { 1, 3, 5 }, new int[] { 2, 4 });// {1,3,5,2,4}
add添加一个数据到数组ArrayUtils.add(new int[] { 1, 3, 5 }, 4);// {1,3,5,4}
remove删除数组中某个位置上的数据,删除第一个

// 删除数组中某个对象(从正序开始搜索)

ArrayUtils.remove(new int[] { 1, 3, 5 }, 1);// {1,5}

removeElement删除数组中某个对象(从正序开始搜索,删除第一个)

ArrayUtils.removeElement(new int[] { 1, 3, 5 }, 3);// {1,5}

1.2 Arrays

1.2.1 将Array转化成Set集合

在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中,主要应用在显示列表。可以先将Array转换成List,然后再将List转换成Set。

Set<String> set = new HashSet<String>(Arrays.asList(stringArray));
System.out.println(set);  //[d, e, b, c, a]

1.2.2 从Array中创建ArrayList

为什么要将Array转换成ArrayList呢?因为ArrayList是动态链表,可以更方便地对ArrayList进行增删改。这里,不需要循环Array将每一个元素加入到ArrayList中,用以下的代码即可简单实现转换:

String[] stringArray = { "a", "b", "c", "d", "e" };
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
System.out.println(arrayList);   // [a, b, c, d, e]

1.2.3 填充替换数组元素

数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。fill()方法有两种参数类型。

fill(int[ ]a,int value) :该方法可将指定的int值分配给int型数组的每一个元素。

public static void main(String[] args) {

    int[]arr=new int[5];
    Arrays.fill(arr, 6);

    for (int i = 0; i < arr.length; i++) {
        System.out.println("第"+i+"个元素是:"+arr[i]);
    }
}

fill(int []a, int fromIndex, int toIndex, int val) :该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromIndex(包括)一直到索引toIndex(不包括)。如果fromIndex==toIndex,则填充范围为空。


public static void main(String[] args) {

    int arr[]=new int[]{1,2,3,4};
    Arrays.fill(arr, 1, 2, 5);

    for (int i = 0; i < arr.length; i++) {
        System.out.println("第"+i+"个元素是"+arr[i]);
    }
}

如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException(数组越界异常)异常。

2.数组基本操作实现

public class ArrayUtils {
//求数组的最大值(int)
 public static int getMax(int[] arr){
  int max = arr[0];
  for(int i = 0;i<arr.length;i++){
   if(max<arr[i]){
    max = arr[i];
   }
  }
  return max;
 }
//求数组的最小值(int)
 public static int getMin(int[] arr){
  int min = arr[0];
  for(int i = 0;i<arr.length;i++){
   if(min>arr[i]){
    min = arr[i];
   }
  }
  return min;
 }
//得到数组最大值的下标(int)
 public static int getMaxIndex(int[] arr){
  int maxIndex = 0;
  for(int i = 0;i <arr.length;i++){
   if(arr[maxIndex]<arr[i]){
    maxIndex = i;
   }
  }
  return maxIndex;
 }
//得到数组最小值的下标(int)
 public static int getMinIndex(int[] arr){
  int minIndex = 0;
  for(int i = 0;i <arr.length;i++){
   if(arr[minIndex]>arr[i]){
    minIndex = i;
   }
  }
  return minIndex;
 }
//获得数组之和(int)
 public static int getSum(int[] arr){
  int sum = 0;
  for(int i = 0; i < arr.length;i++){
   sum += arr[i];
  }
  return sum; 
 }
//获得平均值(int)
 public static int getAverage(int[] arr){
  int avg = getSum(arr)/arr.length;
  return avg;
 }
//打印数组(int)
 public static void printArray(int[] arr){
  for(int i = 0;i<arr.length;i++){
   if(i!=arr.length-1){
    System.out.print(arr[i]+",");
   }else{
    System.out.println(arr[i]);
   }
  }
 }
//选择排序对数据进行降序排序(int)
   public static void selectSortDescendingArray(int[] arr){
    for(int i = 0; i<arr.length-1;i++){//i<arr.length-1;最后一个不用比较
     for(int j = i+1;j<arr.length;j++){
      if(arr[i]<arr[j]){
       int temp = arr[j];
       arr[j] = arr[i];
       arr[i] = temp;
       }
     }
    }
   }
//选择排序对数据进行升序排序(int)
   public static void selectSortAscendingArray(int[] arr){
    for(int i = 0; i<arr.length-1;i++){//i<arr.length-1;最后一个不用比较
     for(int j = i+1;j<arr.length;j++){
      if(arr[i]>arr[j]){
       int temp = arr[j];
       arr[j] = arr[i];
       arr[i] = temp;
       }
     }
    }
   }
//冒泡排序对数据进行降序排序(int)
  public static void bubbleSortDescendingArray(int[] arr){
   for(int i = 0;i<arr.length-1;i++){
    for(int j = 0;j<arr.length-1-i;j++){
     if(arr[j]<arr[j+1]){
      int temp = arr[j+1];
      arr[j+1] = arr[j];
      arr[j] = temp;
      }
    }
   }
  }
//冒泡排序对数据进行升序排序(int)
  public static void bubbleSortAscendingArray(int[] arr){
   for(int i = 0;i<arr.length-1;i++){
    for(int j = 0;j<arr.length-1-i;j++){
     if(arr[j]>arr[j+1]){
      int temp = arr[j+1];
      arr[j+1] = arr[j];
      arr[j] = temp;
      }
    }
   }
  }
//二分查找(int)
  public static int binarySearch(int[] arr,int key){
   int min,mid,max;
   min = 0;
   max = arr.length-1;
   while(arr[min]<arr[max]){
    mid = (min+max)/2;
    if(key>arr[mid]){
     min = mid+1;
    }else if(key<arr[mid]){
     max = mid-1;
    }else {
     return mid;
    }
   }
   return -1;
  }
//*********************************************************************
   
//求数组的最大值(double)
 public static double getMax(double[] arr){
  double max = arr[0];
  for(int i = 0;i<arr.length;i++){
   if(max<arr[i]){
    max = arr[i];
   }
  }
  return max;
 }
//求数组的最小值(double)
  public static double getMin(double[] arr){
   double min = arr[0];
   for(int i = 0;i<arr.length;i++){
    if(min>arr[i]){
     min = arr[i];
    }
   }
   return min;
  }
//得到数组最大值的下标(double)
  public static int getMaxIndex(double[] arr){
   int maxIndex = 0;
   for(int i = 0;i <arr.length;i++){
    if(arr[maxIndex]<arr[i]){
     maxIndex = i;
    }
   }
   return maxIndex;
  }
//得到数组最小值的下标(double)
  public static int getMinIndex(double[] arr){
   int minIndex = 0;
   for(int i = 0;i <arr.length;i++){
    if(arr[minIndex]>arr[i]){
     minIndex = i;
    }
   }
   return minIndex;
  }
//获得数组之和(double)
  public static double getSum(double[] arr){
   double sum = 0;
   for(int i = 0; i < arr.length;i++){
    sum += arr[i];
   }
   return sum; 
  }
//获得平均值(double)
  public static double getAverage(double[] arr){
   double avg = getSum(arr)/arr.length;
   return avg;
  }
//打印数组(double)
    public static void printArray(double[] arr){
     for(int i = 0;i<arr.length;i++){
      if(i!=arr.length-1){
       System.out.print(arr[i]+",");
      }else{
       System.out.println(arr[i]);
      }
     }
    }
//选择排序对数据进行降序排序(double)
  public static void selectSortDescendingArray(double[] arr){
   for(int i = 0; i<arr.length-1;i++){//i<arr.length-1;最后一个不用比较
    for(int j = i+1;j<arr.length;j++){
     if(arr[i]<arr[j]){
      double temp = arr[j];
      arr[j] = arr[i];
      arr[i] = temp;
      }
    }
   }
  }
//选择排序对数据进行升序排序(double)
  public static void selectSortAscendingArray(double[] arr){
   for(int i = 0; i<arr.length-1;i++){//i<arr.length-1;最后一个不用比较
    for(int j = i+1;j<arr.length;j++){
     if(arr[i]>arr[j]){
      double temp = arr[j];
      arr[j] = arr[i];
      arr[i] = temp;
      }
    }
   }
  }
//冒泡排序对数据进行降序排序(double)
 public static void bubbleSortDescendingArray(double[] arr){
  for(int i = 0;i<arr.length-1;i++){
   for(int j = 0;j<arr.length-1-i;j++){
    if(arr[j]<arr[j+1]){
     double temp = arr[j+1];
     arr[j+1] = arr[j];
     arr[j] = temp;
     }
   }
  }
 }
//冒泡排序对数据进行升序排序(double)
 public static void bubbleSortAscendingArray(double[] arr){
  for(int i = 0;i<arr.length-1;i++){
   for(int j = 0;j<arr.length-1-i;j++){
    if(arr[j]>arr[j+1]){
     double temp = arr[j+1];
     arr[j+1] = arr[j];
     arr[j] = temp;
     }
   }
  }
 }
//二分查找(double)
   public static int binarySearch(double[] arr,double key){
    int min,mid,max;
    min = 0;
    max = arr.length-1;
    while(arr[min]<arr[max]){
     mid = (min+max)/2;
     if(key>arr[mid]){
      min = mid+1;
     }else if(key<arr[mid]){
      max = mid-1;
     }else {
      return mid;
     }
    }
    return -1;
   }
}

最后

以上就是自觉黑夜为你收集整理的【java】数组的基本操作1.使用类库操作数组2.数组基本操作实现的全部内容,希望文章能够帮你解决【java】数组的基本操作1.使用类库操作数组2.数组基本操作实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部