zoukankan      html  css  js  c++  java
  • 数组的介绍

    数组是指一组数据的集合,且同一个数组中存在的数据都是同一类型的,我们用下角标来表示元素在数组中的位置,从 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));
  • 相关阅读:
    北京燃气IC卡充值笔记
    随机分析、随机控制等科目在量化投资、计算金融方向有哪些应用?
    量化交易平台大全
    Doctor of Philosophy in Computational and Mathematical Engineering
    Institute for Computational and Mathematical Engineering
    Requirements for the Master of Science in Computational and Mathematical Engineering
    MSc in Mathematical and Computational Finance
    万字长文:详解多智能体强化学习的基础和应用
    数据处理思想和程序架构: 使用Mbedtls包中的SSL,和服务器进行网络加密通信
    31-STM32+W5500+AIR202/302基本控制篇-功能优化-W5500移植mbedtls库以SSL方式连接MQTT服务器(单向忽略认证)
  • 原文地址:https://www.cnblogs.com/YJK923/p/9428663.html
Copyright © 2011-2022 走看看