概述
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} 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.数组基本操作实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复