我需要创建一个程序,不仅可以将2个数组放在一起,而且还可以避免打印两次在数组上重复的数字。
例如:
1,2,3,4,5 //Array 1
5,6,7,8,4 //Array 2
1,2,3,4,5,6,7,8 //Array 1 & 2 together
我听说Hashshet可以帮忙执行此操作,但我不确定它是否有效。 我刚刚开始编程,所以我不知道很多这样的东西。
希望有人可以帮助我。
谢谢
你是在正确的道路上,只需编码!
所以这取决于你想做什么。 你想要消除重复,你想要订购它们......类Arrays,Collections和Interface Collection是很好的起点
看看这些链接:stackoverflow.com/questions/80476/… 和stackoverflow.com/questions/4697255/combine-two-integer-arrays
这看起来像一个重复的问题,请看链接stackoverflow.com/questions/5818057/union-of-2-arrays-in-java
HashSet hs = new HashSet();
for(int i=0;i
hs.add(arr1[i]);
}
以同样的方式做第二个数组。
hs不包含任何重复值。
这是否维持元素的顺序? 根据我的理解,HashSet在迭代时不保证顺序
不,这不保持秩序。 如果您需要维护订单,请尝试使用LinkedHashSet
您也可以使用TreeSet,它将按递增顺序对所有元素进行排序。
试试这个:
String arr[] = {"1","2","3","4"};
String arr2[] = {"1","2","3","4","5"};
List numList = new ArrayList(Arrays.asList(arr));
Collections.addAll(numList, arr2);
Set aSet = new HashSet(numList);
Iterator iterator = aSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
如果需要删除重复项并保留插入项的顺序,则可以使用LinkedHashSet:
Set set = new LinkedHashSet();
for(int i = 0;i < firstArray.length; i++){
set.add(firstArray[i]);
}
// set now contains 1,2,3,4,5
for(int i = 0;i < secondArray.length; i++){
set.add(secondArray[i]);
}
// set now contains 1,2,3,4,5,6,7,8
如果您不需要保留插入顺序,则可以将set的实现更改为HashSet:
Set set = new HashSet();
添加ArrayList1,ArrayList2并生成单个arraylist ArrayList3。
现在将其转换为
Set Unique_set = new HashSet(Arraylist3);
在独特的设置中,您将获得独特的元素。
注意
ArrayList允许复制值。 Set不允许值重复。希望你的问题得到解决。
我将给你一般的算法,我会留给你编码。
创建一个大小等于array1.length+array2.length的新数组(称为结果)
创建类型为的哈希映射
在遍历数组时,在将数字复制到"结果"之前检查数字是否存在于hashmap中(如果布尔值为true则存在)。如果不是您可以安全地复制到结果中,请将该数字的布尔值翻转为true。
当你到达第一个数组的末尾时。将第二个循环的索引变量设置为等于第一个数组的长度,然后重复步骤3。
如果你不知道HashMap,这是如何初始化它。 Get()将通过其键检索元素,put()将在您指定的键上放置一个值(在您的情况下将是数字)。
HashMap map = new HashMap();
我希望它能帮助你
合并排序算法
合并排序代码
这只有在他想要对数组进行排序时才有用(我假设他没有)。 此外,它不会消除重复,它只是使它们更容易找到。
在合并排序中你学会了如何组合多个数组。而且它还表明他做了一些事情来对它们进行排序,这样他就可以使用合并排序做同样的事情
但是你并没有消除重复,而是破坏了数组的顺序
他可以检查是否有重复的项目并转到下一个项目
我意识到这一点,但它仍然没有维持元素的顺序。 你正在对数组进行排序,他没有说他需要对它进行排序。
结合
int lengthA = arrayA.length;
int lengthB = arrayB.length;
Sample[] result = new Sample[arrayA + arrayB];
System.arraycopy(arrayA, 0, result, 0, lengthA);
System.arraycopy(arrayA, 0, result, lengthA, lengthB);
然后将所有数组值添加到Set中。它会减少重复值。
使用以下简单代码:
List arr1=new ArrayList<>(); //1 2 3 4 5
List arr2=new ArrayList<>(); // 5 6 7 8
Set res=new HashSet<>();
res.addAll(arr1);
res.addAll(arr2);
System.out.println(res); //1 2 3 4 5 6 7 8
第1步:初始化第三个新数组
步骤2:迭代两个数组并将所有元素存储在第三个数组中
第3步:排序第三个数组