草庐IT

6、Arrays类

muzhe777 2023-04-16 原文

Arrays类

  1. Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜索)

  2. 常用方法

    • toString 返回数组的字符串形式 Arrays.toString(arr)

      Integer[] integers = {1, 20, 90};
      System.out.println(Arrays.toString(integers)); //[1, 20, 90]
      
    • sort 排序(自然排序和定制排序)

      Integer arr[] = {1, -1, 7, 0, 89};
      //1. 因为数组是引用类型,所以通过sort排序后,会直接影响到 实参 arr
      //2. sort重载的,也可以通过传入一个接口 Comparator 实现定制排序
      //3. 调用 定制排序 时,传入两个参数 (1) 排序的数组arr
      //   (2) 实现了Comparator接口的匿名内部类,要求实现 compare方法
      //4. 这里体现了接口编程的方式,看看源码,就明白
      //      源码分析
      // (1) Arrays.sort(arr, new Comparator()
      // (2) 最终到 TimSort类 private static <T> void binarySort(T[] a, int lo, int hi, int start,
      //                                       Comparator<? super T> c)
      // (3) 执行到 binarySort 方法的代码,会根据动态绑定机制 c.compare()执行我们传入的
      //     匿名内部类的 compare()
      //          while (left < right) {
      //                int mid = (left + right) >>> 1;
      //                if (c.compare(pivot, a[mid]) < 0)
      //                    right = mid;
      //                else
      //                    left = mid + 1;
      //            }
      // (4) new Comparator() {
      //            @Override
      //            public int compare(Object o1, Object o2) {
      //                Integer i1 = (Integer)o1;
      //                Integer i2 = (Integer)o2;
      //                return i2 - i1;
      //            }
      //        }
      // (5) public int compare(Object o1, Object o2) 返回的值>0 还是 <0
      //     会影响整个排序结果
      //Arrays.sort(arr);  // 默认排序
      //定制排序
      Arrays.sort(arr, new Comparator() {
          @Override
          public int compare(Object o1, Object o2) {
              Integer i1 = (Integer)o1;
              Integer i2 = (Integer)o2;
              return i1 - i2;
          }
      });
      System.out.println(Arrays.toString(arr));//[-1, 0, 1, 7, 89]
      
      
    • binarySearch 通过二分搜索法进行查找,要求必须排好序

      //1. 要求该数组是有序的,如果该数组是无序的,不能使用binarySearch
      //2. 如果数组中不存在该元素,就返回 return -(low + 1); low是如果存在,它应该在的位置
      Integer[] arr = {1, 2, 90, 123, 567};
      int index = Arrays.binarySearch(arr,2);
      System.out.println("index=" + index);
      
    • copyOf 数组元素的复制

      //1. 从 arr 数组中,拷贝 arr.length 个元素到 newArr数组中
      //2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
      //3. 如果拷贝长度 < 0 就抛出异常NegativeArraySizeException
      //4. 该方法的底层使用的是 System.arraycopy()
      Integer[] newArr = Arrays.copyOf(arr,arr.length);
      
    • fill 数组元素的填充

      //1. 使用 99 去填充 num数组,可以理解成是替换原来的元素
      Integer[] num = new Integer[]{9, 3, 2};
      Arrays.fill(num,99);
      System.out.println(Arrays.toString(num)); //[99, 99, 99]
      
    • equals 比较两个元素内容是否完全一致

      //1. 如果arr 和 arr2 数组的元素一样,则方法返回true
      //2. 如果不是完全一样,就返回false
      Boolean equals = Arrays.equals(arr,arr2);
      System.out.println("equals=" + equals); //equals=true
      
    • asList 将一组值,转换成list

      //1. asList方法,会将(2,3,4,5,6,1)数据转成一个List集合
      //2. 返回的 asList 编译类型 List(接口)
      //3. asList 运行类型 java.util.Arrays#ArrayList
      List asList = Arrays.asList(2,3,4,5,6,1);
      System.out.println("asList=" + asList);
      System.out.println("asList的运行类型" + asList.getClass());
      

有关6、Arrays类的更多相关文章

  1. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  2. ruby - Arrays Sets 和 SortedSets 在 Ruby 中是如何实现的 - 2

    通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复

  3. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  4. arrays - Ruby:尝试在哈希数组上获取 Enumerator 时,nil:NilClass 的未定义方法 `[]' - 2

    我正在尝试循环哈希数组。当我到达获取枚举器开始循环的位置时,出现以下错误:undefinedmethod`[]'fornil:NilClass我的代码如下所示:defextraireAttributs(attributsParam)classeTrouvee=falsescanTrouve=falseownerOSTrouve=falseownerAppTrouve=falseresultat=Hash.new(0)attributs=Array(attributsParam)attributs.eachdo|attribut|#CRASHESHERE!!!typeAttribut=a

  5. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  6. arrays - 如何在下面的示例中将两个值数组分组为 n 个值数组? - 2

    我已经有很多两个值数组,例如下面的例子ary=[[1,2],[2,3],[1,3],[4,5],[5,6],[4,7],[7,8],[4,8]]我想把它们分组到[1,2,3],[4,5],[5,6],[4,7,8]因为意思是1和2有关系,2和3有关系,1和3有关系,所以1,2,3都有关系我如何通过ruby​​库或任何算法来做到这一点? 最佳答案 这是基本Bron–Kerboschalgorithm的Ruby实现:classGraphdefinitialize(edges)@edges=edgesenddeffind_maximum_

  7. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  8. arrays - Ruby 可枚举 - 查找最多 n 次匹配元素 - 2

    我有以下数组:arr=[1,3,2,5,2,4,2,2,4,4,2,2,4,2,1,5]我想要一个包含前三个奇数元素的数组。我知道我可以做到:arr.select(&:odd?).take(3)但我想避免遍历整个数组,而是在找到第三个匹配项后返回。我想出了以下解决方案,我相信它可以满足我的要求:my_arr.each_with_object([])do|el,memo|memo但是有没有更简单/惯用的方法来做到这一点? 最佳答案 使用lazyenumerator与Enumerable#lazy:arr.lazy.select(&:o

  9. Ruby Arrays - 求对角线的总和 - 2

    以前没见过这个,但我想知道如何在Ruby中找到二维数组的两条对角线之和。假设您有一个简单的数组,包含3行和3列。array=[1,2,3,4,5,6,7,8,9]我可以通过使用将它分成三个一组array.each_slice(3).to_a现在是[1,2,3],[4,5,6],[7,8,9][1,2,3][4,5,6][7,8,9]在这种情况下,对角线是1+5+9=153+5+7=15所以总和为15+15=30我想我可以做类似的事情diagonal_sum=0foriin0..2forjin0..2diagonal_sum+=array[i][j]endend

  10. ruby - Array of Arrays,根据索引处的数组内容删除一个索引? - 2

    我一直在努力学习如何处理由数组组成的数组。假设我有这个数组:my_array=[['ORANGE',1],['APPLE',2],['PEACH',3]我将如何找到包含'apple'的my_array索引并删除该索引(删除子数组['APPLE',2]因为'apple'包含在该索引的数组中)?谢谢-我非常感谢这里的帮助。 最佳答案 您可以使用Array.select过滤掉项目:>>a=[['ORANGE',1],['APPLE',2],['PEACH',3]]=>[["ORANGE",1],["APPLE",2],["PEACH",3

随机推荐