我正在尝试"组合"两个arrayLists,生成一个新的arrayList,其中包含两个组合arrayLists中的所有数字,但没有任何重复元素,它们应该按顺序排列.我在下面提出了这个代码.我经历过它,这对我来说很有意义,但我不确定我是否可以使用<或>来比较get(i)在arrayLists中.我将array1中的所有元素添加到plusArray中.然后我将通过plusArray并将其与array2进行比较,以查看arrayA的元素是否存在于plusArray中.如果他们这样做我什么都不做,但如果他们不这样做,那么我试图将它添加到正确的位置.也许我的嵌套for循环使用不正确?注意:ArrayLists由用户按递增顺序排序.
ArrayList<Integer> plusArray = new ArrayList<Integer>();
for(int i = 0; i < array1.size(); i++){
plusArray.add(array1.get(i));
}
for(int i = 0; i < plusArray.size(); i++){
for(int j = 0; j < array2.size(); j++){
if(array2.get(j) < plusArray.get(i)){
plusArray.add(i,array2.get(j));
}
else if(plusArray.get(i).equals(array2.get(j))){
;
}
else if(array2.get(j) > plusArray.get(i)){
plusArray.add(i, array2.get(j));
}
}
Run Code Online (Sandbox Code Playgroud)
更新:我不再得到下面的例外.相反,程序似乎永远运行.我更改了<和>条件中添加元素的位置.///这是我的数组列表得到的异常:IntSet 1:{1 2} IntSet 2:{1 3 4}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.grow(Unknown Source)
at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
at java.util.ArrayList.add(Unknown Source)
at IntSet.plus(IntSet.java:92)
at IntSetDriver.main(IntSetDriver.java:61)
Run Code Online (Sandbox Code Playgroud)
小智 71
首先删除重复项:
arrayList1.removeAll(arrayList2);
Run Code Online (Sandbox Code Playgroud)
然后合并两个arrayList:
arrayList1.addAll(arrayList2);
Run Code Online (Sandbox Code Playgroud)
最后,如果您愿意,可以对您的arrayList进行排序:
collections.sort(arrayList1);
Run Code Online (Sandbox Code Playgroud)
如果您不想对现有列表进行任何更改,请首先创建其备份列表:
arrayList1Backup = new ArrayList(arrayList1);
Run Code Online (Sandbox Code Playgroud)
ieh*_*ich 29
您可以使用ArrayList.addAll()
合并列表,对其Collections.sort()
进行排序,最后遍历生成的ArrayList以删除重复项,而不是您编写的代码.因此O(n)+O(n*log(n))+O(n)
,总体复杂性等同于O(n*log(n))
.
spe*_*ial 13
添加ArrayList1,ArrayList2并生成Single arraylist ArrayList3.现在将其转换为
Set Unique_set = new HashSet(Arraylist3);
Run Code Online (Sandbox Code Playgroud)
在独特的设置中,您将获得独特的元素.
注意
ArrayList允许复制值. Set不允许值重复.希望你的问题得到解决.
Dil*_*anG 12
List<String> listA = new ArrayList<String>();
listA.add("A");
listA.add("B");
List<String> listB = new ArrayList<String>();
listB.add("B");
listB.add("C");
Set<String> newSet = new HashSet<String>(listA);
newSet.addAll(listB);
List<String> newList = new ArrayList<String>(newSet);
System.out.println("New List :"+newList);
Run Code Online (Sandbox Code Playgroud)
给你 新名单:[A,B,C]
Java 8 Stream API
可以用于此目的,
ArrayList<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
list1.add("A");
list1.add("D");
list1.add("G");
ArrayList<String> list2 = new ArrayList<>();
list2.add("B");
list2.add("D");
list2.add("E");
list2.add("G");
List<String> noDup = Stream.concat(list1.stream(), list2.stream())
.distinct()
.collect(Collectors.toList());
noDup.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
顺带一提,distinct()
使用不能忘记hashCode()
。
这是使用 java 8 的一种解决方案:
Stream.of(list1, list2)
.flatMap(Collection::stream)
.distinct()
// .sorted() uncomment if you want sorted list
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
在第一个数组列表中添加元素
ArrayList<String> firstArrayList = new ArrayList<String>();
firstArrayList.add("A");
firstArrayList.add("B");
firstArrayList.add("C");
firstArrayList.add("D");
firstArrayList.add("E");
Run Code Online (Sandbox Code Playgroud)
在第二个数组列表中添加元素
ArrayList<String> secondArrayList = new ArrayList<String>();
secondArrayList.add("B");
secondArrayList.add("D");
secondArrayList.add("F");
secondArrayList.add("G");
Run Code Online (Sandbox Code Playgroud)
将第一个数组列表的元素添加到第二个数组列表中
secondArrayList.addAll(firstArrayList);
Run Code Online (Sandbox Code Playgroud)
分配新的组合数组列表并添加两个数组列表中的所有元素
ArrayList<String> comboArrayList = new ArrayList<String>(firstArrayList);
comboArrayList.addAll(secondArrayList);
Run Code Online (Sandbox Code Playgroud)
分配新的 Set 以从数组列表中删除重复的条目
Set<String> setList = new LinkedHashSet<String>(comboArrayList);
comboArrayList.clear();
comboArrayList.addAll(setList);
Run Code Online (Sandbox Code Playgroud)
排序数组列表
Collections.sort(comboArrayList);
Run Code Online (Sandbox Code Playgroud)
输出
A
B
C
D
E
F
G
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
144954 次 |
最近记录: |