[英]Sorting and swapping elements in two ArrayLists (Java)
我是Java新手...
我有两个ArrayLists:
subList1
subList2
它们已经由另一种方法填充,并且在运行时,列表包含以下字符串:
subList1: [amulet, map, stone, sword]
subList2: [bottle, shield, wand]
我需要做的是对两个列表进行排序,以便在字母顺序方面,subList1包含的所有元素都小于subList2中的元素。 同样,两个列表大小必须保持相同。
预期产量:
subList1: [amulet, bottle, map, shield]
subList2: [stone, sword, wand]
到目前为止,我的代码:
Collections.sort(subList1);
Collections.sort(subList2);
//[amulet, map, stone, sword]
//[bottle, shield, wand]
for (int i1 = 0; i1 < subList1.size(); i1++) {
for (int i2 = 0; i2 < subList2.size(); i2++) {
if (subList1.get(i1).compareTo(subList2.get(i1)) < 0) {
// first run: element 0: subList1 = amulet, subList2 = bottle
String temp = subList1.get(i1);
subList1.set(i1, subList2.get(i1));
subList2.set(i1, subList1.get(i1));
我还获得了针对以下行的IndexOutOfBoundsException:
if (subList1.get(i1).compareTo(subList2.get(i1)) < 0)
任何帮助,不胜感激。 谢谢。
您所拥有的(不正确)
if (subList1.get(i1).compareTo(subList2.get(i1)) < 0)
应该是什么(正确)
if (subList1.get(i1).compareTo(subList2.get(i2)) < 0) // you wrote i1 instead of i2
_____
您正在通过分别对两个列表进行排序,然后对其进行迭代来使任务复杂化。 我建议您遵循这种方法:
newList = subList1 + subList2
newList
subList2
从的末端newList
。 subList1
从年初newList
工作代码:
Collection<String> subList1 = Arrays.asList("amulet", "map", "stone", "sword");
Collection<String> subList2 = Arrays.asList("bottle", "shield", "wand");
// Merge two collection in a single list
List<String> mergedList = new ArrayList<>(subList1);
mergedList.addAll(subList2);
Collections.sort(mergedList);
// Assign subList from mergedList back to original Collection reference
subList1 = mergedList.subList(0, subList1.size());
subList2 = mergedList.subList(subList1.size(), mergedList.size());
System.out.println(subList1); // [amulet, bottle, map, shield]
System.out.println(subList2); // [stone, sword, wand]
这将解决您的异常:if(subList1.get(i1).compareTo(subList2.get(i2))<0)
要对两个列表进行排序,您需要采用第一个列表的大小。 (即int len = subList1.length()),将它们合并在一起,对其进行排序,然后根据您首先保存的'len'变量将其分为2个。
大概是这样的:
int length = subList1.length();
subList1.addAll(subList2); // add both lists together
Collections.sort(subList1); // sort
// split them both up again
subList2 = subList1.subList(length, subList1.length());
subList1 = subList1.subList(0, length);
可以用很多方法解决这个问题,但是应该为您提供一个良好的起点。 length变量不是必需的(我们知道subList 2的长度),但是使代码易于阅读。
合并两个列表:
List<String> merged = new ArrayList<String>();
merged.addAll(subList1);
merged.addAll(subList2);
排序合并列表:
Collections.sort(merged);
获取subList1的大小:
int k = subList1.size();
清除并将合并列表的条目从0到k添加到subList1中:
subList1.clear();
subList1.addAll(merged.subList(0, k));
清除并将合并列表的条目从k到n添加到subList2中(其中n是合并列表的大小):
subList2.clear();
subList2.addAll(merged.subList(k, merged.size()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.