我写了下面的代码来比较具有相同元素但顺序不同的数组。
Integer arr1[] = {1,4,6,7,2};
Integer arr2[] = {1,2,7,4,6};
例如,上面的数组是相等的,因为它们具有相同的元素 1,2,4,6,7。如果您有更好的代码用于更大的数组,请分享。
编辑 如果从两个数组中获取唯一元素并且它们看起来相同,那么数组也应该相等。如何在不使用任何集合类的情况下编写代码。 例如:arr1={1,2,3,1,2,3} arr2={3,2,1} 方法应返回 true(=两个数组相同)。
package com.test;
public class ArrayCompare {
public boolean compareArrays(Integer[] arr1, Integer[] arr2){
if(arr1==null || arr2==null){
return false;
}
if(arr1.length!=arr2.length){
return false;
}
Integer[] sortedArr1=sortArray(arr1);
Integer[] sortedArr2=sortArray(arr2);
for(int i=0;i<sortedArr1.length-1;i++){
if(sortedArr1[i]!=sortedArr2[i]){
return false;
}
}
return true;
}
public void swapElements(Integer[] arr,int pos){
int temp=arr[pos];
arr[pos]=arr[pos+1];
arr[pos+1]=temp;
}
public Integer[] sortArray(Integer[] arr){
for(int k=0;k<arr.length;k++){
for(int i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
swapElements(arr,i);
}
}
}
return arr;
}
public static void main(String[] args) {
Integer arr1[] = {1,4,6,7,2};
Integer arr2[] = {1,2,7,4,6};
ArrayCompare arrComp=new ArrayCompare();
System.out.println(arrComp.compareArrays(arr1, arr2));
}
最佳答案
你关心重复计数吗?例如,您需要区分 { 1, 1, 2 } 和 { 1, 2, 2 } 吗?如果没有,只需使用 HashSet:
public static boolean compareArrays(Integer[] arr1, Integer[] arr2) {
HashSet<Integer> set1 = new HashSet<Integer>(Arrays.asList(arr1));
HashSet<Integer> set2 = new HashSet<Integer>(Arrays.asList(arr2));
return set1.equals(set2);
}
如果您确实关心重复项,那么您可以使用来自Guava 的Multiset .
如果你想坚持使用排序版本,为什么不使用内置的排序算法而不是编写自己的排序算法?
编辑:如果您乐于修改现有数组,您甚至不需要创建副本。例如:
public static boolean compareArrays(Integer[] arr1, Integer[] arr2) {
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1, arr2);
}
您还可以针对数组长度不同的情况进行优化:
public static boolean compareArrays(Integer[] arr1, Integer[] arr2) {
// TODO: Null validation...
if (arr1.length != arr2.length) {
return false;
}
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1, arr2);
}
关于java - 比较具有不同顺序的相同元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103621/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby数组,我们在StackOverflow上找到一
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我正在使用puppet为ruby程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat