数组的介绍

数组是指一组数据的集合,且同一个数组中存在的数据都是同一类型的,我们用下角标来表示元素在数组中的位置,从 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]; 这样两个一维数组 。或许看看图片能刚好的理解,这里放几张来自百度的数组在内存中的分配图 。

 

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

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

  1 /**
  2 数组的声明与创建
  3 */
  4 
  5 String [] arr;
  6 int arr1[];
  7 String[] array=new String[5];
  8 int score[]=new int[3];
  9 
 10 /**
 11 数组赋值
 12 */
 13 
 14 //初始化时赋值
 15 int arr2[]=new int[]{1,2,3,4,5};
 16 String[] array1={"马超","马云","关羽","刘备","张飞"};
 17 String[] array2=new String[]{"黄渤","张艺兴","黄磊"};
 18 int score[]=new int[3];
 19 //动态赋值
 20 for(int i=0;i<score.length;i++)
 21 {   
 22   score[i]=i+1; 
 23 }
 24 
 25 /**
 26 打印数组
 27 */
 28 
 29 int[] arr = { 1, 2, 3, 4, 5 };  
 30 String arrString = Arrays.toString(arr);  
 31 
 32 // 直接输出,为内存地址
 33 System.out.println(arr);  
 34 // [I@139a55
 35 
 36 System.out.println(arrString );  
 37 // [1, 2, 3, 4, 5]
 38 
 39 /**
 40 int 数组转成 string 数组
 41 */
 42 
 43 int[]  array3={1,2,3,4,5,6,7,8,9,0};
 44 String arrStrings=Arrays.toString(array3);
 45 
 46 /**
 47 数组转成 list 集合
 48 */
 49 
 50 String[] array2 = new String[]{"黄渤","张艺兴","孙红雷","黄磊"};
 51 //方法 1
 52 List<String> list=new ArrayList<String>();
 53 for (int i = 0; i < array2.length; i++) {
 54     list.add(array2[i]);
 55 }
 56 
 57 String[] arrStrings2={"1","2","3"};
 58 //方法 2
 59 List<String > list2=java.util.Arrays.asList(arrStrings2);
 60 
 61 /**
 62 检查数组中是否包含某一个值
 63 */
 64 
 65 String a="马超";
 66 String[] array1={"马超","马云","关羽","刘备","张飞"};
 67 if (Arrays.asList(array1).contains(a)) {
 68     System.out.println("马超在这里");
 69 }
 70 
 71 /**
 72 数组转成 set 集合
 73 */
 74 
 75 String[] array2=new String[]{"黄渤","张艺兴","孙红雷","黄磊"};
 76 Set<String> set=new HashSet<String>(Arrays.asList(array2));
 77 
 78 /**
 79 数组的排序 sort() : 从小到大排序 。下一节总结一下排序的算法 。
 80 */
 81 
 82 //方法 1
 83 int[] arr4 = {3, 7, 2, 1, 9};
 84 Arrays.sort(arr4);         // sort(int[] a)   放入数组名字
 85 for (int i = 0; i < arr4.length; i++) {
 86     System.out.println(arr4[i]);
 87 }
 88 //方法 2     
 89 int[] arr5 = {3, 7, 2, 1, 9,3,45,7,8,8,3,2,65,34,5};
 90 Arrays.sort(arr5, 1, 4);  // sort(a, fromIndex, toIndex)    从第几个到第几个之间的进行排序
 91 
 92 /**
 93 数组的复制
 94 */
 95 
 96 //方法 1
 97 int[] arr6 = {3, 7, 2, 1};
 98 int[] arr7=Arrays.copyOf(arr6, 10);  //指定新数组的长度
 99 //方法 2      
100 int[] arr8=Arrays.copyOfRange(arr6, 1, 3); //只复制从索引[1]到索引[3]之间的元素(不包括索引[3]的元素)
101 for (int i = 0; i < arr8.length; i++) {
102         System.out.println(arr8[i]);
103 }
104 
105 // 比较两个数组
106 boolean arr10=Arrays.equals(arr6, arr9);
107 
108 /**
109 数组的去重
110 */
111 
112 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};
113 //利用set的特性(无序不重复)
114 Set<Integer> set2=new HashSet<Integer>();
115 for (int i = 0; i < arr11.length; i++) {
116     set2.add(arr11[i]);
117 }
118 System.out.println(set2);
119 int[] arr12 = new int[set2.size()];
120 int j=0;
121 for (Integer i:set2) {
122     arr12[j++]=i;
123 }
124 System.out.println(Arrays.toString(arr12));

posted on 2018-08-06 09:56  非正经程序员  阅读(305)  评论(0编辑  收藏  举报

导航