• 数组的介绍


    数组是指一组数据的集合,且同一个数组中存在的数据都是同一类型的,我们用下角标来表示元素在数组中的位置,从 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));
  • 相关阅读:
    Linux上安装Tomcat
    SQLServer2008 关于while循环
    [转]接口和抽象类
    windows 装XP系统
    SQLServer2008 表与表之间的数据导入
    问题消灭机
    报错。。。。。。。。。。
    疑问...........
    SQLServer In和Exists
    struts2 访问一个action的时候出现多次重复访问问题(2次或者3次)
  • 原文地址:https://www.cnblogs.com/YJK923/p/9428663.html
Copyright © 2020-2023  润新知