Java 如何按索引顺序将两个arraylist合并为一个arraylist
我有两个数组列表,其中包含x个相等的元素,其想法是将两个数组列表合并为一个,但我想按索引顺序逐个添加元素,目前我有下面列出的代码,但效率不高:Java 如何按索引顺序将两个arraylist合并为一个arraylist,java,android,arraylist,Java,Android,Arraylist,我有两个数组列表,其中包含x个相等的元素,其想法是将两个数组列表合并为一个,但我想按索引顺序逐个添加元素,目前我有下面列出的代码,但效率不高: ArrayList listA=[“a”、“c”、“e”] ArrayList listB=[“b”、“d”、“f”] ArrayList listC; 对于(int i=0;i
ArrayList listA=[“a”、“c”、“e”]
ArrayList listB=[“b”、“d”、“f”]
ArrayList listC;
对于(int i=0;i
输出=[“a”、“b”、“c”、“d”、“e”、“f”]
你可以试着这样做
ArrayList listC=new ArrayList()代码>
listC.addAll(listA)代码>
listC.addAll(listB)代码>
然后分类
Collections.sort(listC)代码>只需在for循环中使用一个arraylist大小。请看我的回答:
ArrayList <String> listA = ["a", "c", "e"]
ArrayList <String> listB = ["b", "d","f"]
ArrayList <String> listC = new ArrayList(listA.size() + listB.size());
for (int i = 0; i < listA.size(); i++){
listC.add(listA.get(i));
lictC.add(listB.get(i));
}
return listC;
ArrayList listA=[“a”、“c”、“e”]
ArrayList listB=[“b”、“d”、“f”]
ArrayList listC=新的ArrayList(listA.size()+listB.size());
对于(int i=0;i
此代码对您有用吗
ArrayList<ArrayList<String>> arraListOfArrayList = new ArrayList<ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();
arraListOfArrayList.add(arrayList);
ArrayList ArrayList OfArrayList=新建ArrayList();
ArrayList ArrayList=新的ArrayList();
添加(arrayList);
正如我在评论中指出的,我认为这是一个XY问题
然而,这个答案可能会有所帮助。它生成一个列表
(但不是数组列表
),它是两个原始列表
的交替视图,根本不需要进行任何复制。因此,它是O(1)
而不是O(n)
public static List alternate(final List不会listC
为空,因此您不能调用.add()
…而for循环将产生索引自动边界异常
限制应为listA.size()
,而不是listA.size()+listB.size()
。什么意思,效率不高?除了读取所有元素并一次添加一个元素之外,还有什么其他方法可以做到呢?“可以容纳x个相等的元素”--这些元素到底有多相等?我正在将代码实现到一个android应用程序中,因此每当我使用listC返回更新textview所需的元素时,oncreate()启动应用程序需要很长时间,这就是我所说的效率低下。因此,就性能而言,我试图找出是否有其他方法可以不使用此方法。@Paulboddington你是对的,我的意思是相等的arraylist size@SashasaLauyout这会将listB附加到listA的末尾。他想要的是一个合并,其中listA.get(N)
位于列表b.get(N)
旁边。如果列表尚未排序,则排序将不起作用。排序位于end@GiuseppeScopelliti没有分类,因为他想把它们分类index@GiuseppeScopelliti如果列表A是[“S”,“B”,“R”,“K”]
?@GiuseppeScopelliti如果列表A是[“S”,“B”,“R”,“K”],而列表B是'[“Z”、“Q”、“A”、“R”]
那么结果应该是[“S”、“Z”、“B”、“Q”、“R”、“A”、“K”、“R”]
。排序会使它们的顺序不正确。感谢您的响应,代码工作正常,应用程序现在正在加载,没有延迟时间@PaulBoddington@jpablo09这是个好消息。这是一个很长的机会,所以我真的很高兴它成功了。AbstractList
是我最喜欢的Java类。是否还会列出其他方法,如iterator
、indexOf
和add
工作?继承总是有风险的,而组合没有任何这些问题。是的,它们都能正常工作。会改变列表的方法会抛出一个异常。通常你应该支持组合而不是继承,但AbstractList
的要点是它是为扩展而设计的。这仅在listA和listB具有相同大小时才有效。新的ArrayList(listA.size()+listB.size());是无用的。该问题具有相同大小的列表,因此我建议这样做。如果两个列表具有不同的大小,则需要相应地更改此逻辑。
ArrayList<ArrayList<String>> arraListOfArrayList = new ArrayList<ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();
arraListOfArrayList.add(arrayList);
public static <T> List<T> alternate(final List<? extends T> list1, final List<? extends T> list2) {
final int size = list1.size();
if (list2.size() != size)
throw new IllegalArgumentException();
return new AbstractList<T>() {
@Override
public int size() {
return 2 * size;
}
@Override
public T get(int i) {
return ((i & 1) == 0 ? list1 : list2).get(i >> 1);
}
};
}
public static void main(String[] args) {
List<String> list1 = Arrays.asList("A", "B", "C");
List<String> list2 = Arrays.asList("D", "E", "F");
System.out.println(alternate(list1, list2)); // prints [A, D, B, E, C, F]
}