如何在不修改两个原始列表的情况下将两个按字典顺序排列的String ArrayLists合并到新的第三个ArrayList中?例如,允许重复。如果list1是:1,3,5和list2是:2,4,7,8,8那么新合并的list3应该是:1,2,3,4,5,7,8,8。我需要创建2个while循环,第一个循环直到整个列表,第二个从剩下的列表中取出遗骸并将所有剩余元素放在新list3的末尾。我基本上需要比较两个列表索引以查看哪个元素进展。一切都应该是正确的,但我需要帮助制作while循环。
对于长篇描述感到抱歉,但我会向任何有帮助的人投票!谢谢!
public class Merge{
public static boolean isStringArrayListSorted(ArrayList<String> data) {
for (int i = 1; i < data.size(); i++) {
if (data.get(i - 1).compareTo(data.get(i)) > 0) {
return false;
}
}
return true;
}
public Merge (ArrayList<String> list1, ArrayList<String> list2){
ArrayList<String> list3 = new ArrayList<String>();
list1.add(0, "a");
list1.add(1, "c");
list1.add(2, "e");
list1.add(3, "g");
list2.add(0, "b");
list2.add(1, "d");
list2.add(2, "f");
list2.add(3, "h");
list2.add(4, "i");
list2.add(5, "j");
while(list1!= null){
if(list1.get(0)> list2.get(0))
{
list3.add(index, element);
}
}
}
答案 0 :(得分:2)
为什么不使用Collections.sort()?
ArrayList<String> list3 = new ArrayList<String>(list1);
list3.addAll(list2);
Collections.sort(list3);
答案 1 :(得分:2)
假设您确实想要进行合并而不是将两者合并并再次排序,它是一个简单的合并代码,如下所示:
public static ArrayList<String> merge(ArrayList<String> L1, ArrayList<String> L2) {
int i1 = 0, i2 = 0;
ArrayList<String> result = new ArrayList<String>();
while (i1 < L1.size() && i2 < L2.size()) {
if (L1.get(i1).compareTo(L2.get(i2)) < 0) {
result.add(L1.get(i1));
i1++;
} else {
result.add(L2.get(i2));
i2++;
}
}
while (i1 < L1.size()) {
result.add(L1.get(i1));
i1++;
}
while (i2 < L2.size()) {
result.add(L2.get(i2));
i2++;
}
return result;
}
答案 2 :(得分:1)
我建议在这里使用Collections.sort ()
。只需创建一个新列表,添加所有元素并对其进行排序。 chide会更短,更具可读性,您将使用内置排序算法的高性能。