我一直在尝试将已经按字母顺序排序的两个字符串arraylists合并为一个大字符串,这个字符串也按字母顺序排序。优选使用一个循环完成,但两个也很好。此外,必须使用comapreTo方法来比较字符串。这就是我所拥有的,但它不起作用。你可能最好重新开始,因为这可能不是很好。
public static ArrayList<String> merge(ArrayList<String> al1, ArrayList<String> al2){
ArrayList<String> result = new ArrayList<String>();
int longLength = al1.size() > al2.size() ? al1.size():al2.size();
for(int i=0;i<longLength;i++){
if(al1.size() > i && al2.size() > i && al1.get(i).compareTo(al2.get(i)) >= 0){
result.add(al2.get(i));
}
else if(al1.size() > i && al2.size() > i && al1.get(i).compareTo(al2.get(i)) < 0) {
result.add(al1.get(i));
}
else if(al1.size() > i && al2.size() <= i) {
result.add(al1.get(i));
}
else if(al1.size() <= i && al2.size() > i) {
result.add(al2.get(i));
}
}
return result;
}
答案 0 :(得分:3)
使用addAll()
将list2的所有元素添加到list1,然后使用实用程序类Collections
addAll()
将list2的所有元素追加到list1的末尾。
Collections.sort()
根据元素的自然顺序将指定列表按升序排序
示例:
public class Main {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("c");
List<String> list2 = new ArrayList<>();
list2.add("b");
list1.addAll(list2);// the order is "a" "c" "b" now
Collections.sort(list1);
for(String e: list1){
System.out.println(e);
}
}
}
输出:
a
b
c
答案 1 :(得分:1)
只需抓住每个列表开头的元素,然后将它们添加到排序列表中。当任何列表不在元素中时,只需添加添加其他列表的所有元素。
示例代码。请注意,list.remove(0)对于ArrayList是O(n),弹出可以通过保留两个索引变量来完成。我把它留给你来完成你的作业!
List<String> result = new ArrayList<>(list1.size() + list2.size());
while( !list1.isEmpty() && !list2.isEmpty()){
if( list1.get(0).compareTo(list2.get(0)) < 0){
result.add(list1.remove(0));
} else {
result.add(list2.remove(0));
}
}
if( list1.isEmpty()){
result.addAll(list2);
} else{
result.addAll(list1);
}