数组的介绍

数组是指一组数据的集合,且同一个数组中存在的数据都是同一类型的,我们用下角标来表示元素在数组中的位置,从 0 开始 。数组的长度表示数组中元素的个数,所以说,长度为 5 的数组的索引是从 0 ~ 4 。

数组的声明就是在说明一下,哎,注意了,我需要一个容器来存放这些类型相同的元素 。声明的方式有这些。 int[] arr ; int arr[] 或是 对象的集合 People[] p ; 这样就声明了一个数组 。但注意此时只是一个在栈中的变量 。接下来就是数组的初始化,使用 new 关键字可以在堆中申请一块空白区域用于保存数组中的元素 。语法是这样,int[] arr = new int[5]; 这就表示创建了一个 5 个 int 类型的元素,而且这些元素是有默认值的,基本数据类型的默认值参考上一节,引用类型的元素默认值为 null 。另外数组在创建的时候需要指定其长度,且数组的长度在之后不可变 。像上面我们是指定了长度为 5 ,也可以传入一个变量 。这里解释一个数组的长度不可变,我们是用 arr 这个变量(遥控器)来操作堆中的数组,但是 arr 还是可以指向其它的数组对象的 ,所以我们说的数组不可变是值堆中的数组实体一旦创建,就不可变,而不是 arr 不能变。

到这里我们就已经得到一个空白的数组对象,有关于数组的操作等下说 。先说一下二维数组的定义和内存分配的情况 。我们可以把二维数组想象成是一维数组的数组,比如 int [][] arr = new int [2][3]; 这表示创建一个 2 行 3 列的数组,可以看成是 int[0] = new int[3] int[1] = new int[3]; 这样两个一维数组 。或许看看图片能刚好的理解,这里放几张来自百度的数组在内存中的分配图 。
这里写图片描述
这里写图片描述

看到这里应该也明白了为什么会有索引了吧,因为没有索引根本定位不到具体的值呀 !

下面就来看一下数组的常用操作 。

/**
数组的声明与创建
*/

String [] arr;
int arr1[];
String[] array=new String[5];
int score[]=new int[3];

/**
数组赋值
*/

//初始化时赋值
int arr2[]=new int[]{1,2,3,4,5};
String[] array1={"马超","马云","关羽","刘备","张飞"};
String[] array2=new String[]{"黄渤","张艺兴","黄磊"};
int score[]=new int[3];
//动态赋值
for(int i=0;i<score.length;i++)
{   
  score[i]=i+1; 
}

/**
打印数组
*/

int[] arr = { 1, 2, 3, 4, 5 };  
String arrString = Arrays.toString(arr);  

// 直接输出,为内存地址
System.out.println(arr);  
// [I@139a55

System.out.println(arrString );  
// [1, 2, 3, 4, 5]

/**
int 数组转成 string 数组
*/

int[]  array3={1,2,3,4,5,6,7,8,9,0};
String arrStrings=Arrays.toString(array3);

/**
数组转成 list 集合
*/

String[] array2 = new String[]{"黄渤","张艺兴","孙红雷""黄磊"};
//方法 1
List<String> list=new ArrayList<String>();
for (int i = 0; i < array2.length; i++) {
    list.add(array2[i]);
}

String[] arrStrings2={"1","2","3"};
//方法 2
List<String > list2=java.util.Arrays.asList(arrStrings2);

/**
检查数组中是否包含某一个值
*/

String a="马超";
String[] array1={"马超","马云","关羽","刘备","张飞"};
if (Arrays.asList(array1).contains(a)) {
    System.out.println("马超在这里");
}

/**
数组转成 set 集合
*/

String[] array2=new String[]{"黄渤","张艺兴","孙红雷","黄磊"};
Set<String> set=new HashSet<String>(Arrays.asList(array2));

/**
数组的排序 sort() : 从小到大排序 。下一节总结一下排序的算法 。
*/

//方法 1
int[] arr4 = {3, 7, 2, 1, 9};
Arrays.sort(arr4);         // sort(int[] a)   放入数组名字
for (int i = 0; i < arr4.length; i++) {
    System.out.println(arr4[i]);
}
//方法 2     
int[] arr5 = {3, 7, 2, 1, 9,3,45,7,8,8,3,2,65,34,5};
Arrays.sort(arr5, 1, 4);  // sort(a, fromIndex, toIndex)    从第几个到第几个之间的进行排序

/**
数组的复制
*/

//方法 1
int[] arr6 = {3, 7, 2, 1};
int[] arr7=Arrays.copyOf(arr6, 10);  //指定新数组的长度
//方法 2      
int[] arr8=Arrays.copyOfRange(arr6, 1, 3); //只复制从索引[1]到索引[3]之间的元素(不包括索引[3]的元素)
for (int i = 0; i < arr8.length; i++) {
        System.out.println(arr8[i]);
}

// 比较两个数组
boolean arr10=Arrays.equals(arr6, arr9);

/**
数组的去重
*/

int[] arr11 = {1, 2, 3, 4,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3};
//利用set的特性(无序不重复)
Set<Integer> set2=new HashSet<Integer>();
for (int i = 0; i < arr11.length; i++) {
    set2.add(arr11[i]);
}
System.out.println(set2);
int[] arr12 = new int[set2.size()];
int j=0;
for (Integer i:set2) {
    arr12[j++]=i;
}
System.out.println(Arrays.toString(arr12));

PS . 以上代码来自https://www.cnblogs.com/epeter/p/5664926.html

猜你喜欢

转载自blog.csdn.net/yujikui1/article/details/81006159