Java的:交错显示两个基于整数的ArrayList - >好的方法? [英] Java: Interleave two integer based arraylists -> good approach?
问题描述
家庭作业:寻找更好的策略,或方法,而不是完整的code
我心中已经有整数两个的ArrayList两种情况下:
- 第一个列表比第二 更大
- 第二个列表比第一 较大
我的目标是既交错条件下列表2的元素,到list1。我创建了才会这样的方法,但是我觉得我可以做的更好的东西。
下面是条件1.注意预期的结果list2中的元素都用尽后,我们离开list1的元素到位:
list1的:[10,20,30,40,50,60,70]
列表2:[4,5,6,7]
组合:[10,4,20日,5,30,6,40,7,50,60,70]
下面为条件2.预期结果由于list2中拥有更多的元素,我们添加这些元素LIST1 list1的耗尽后:
list1的:[10,20,30,40]
列表2:[4,5,6,7,8,9,10,11]
组合:[10,4,20日,5,30,6,40,7,8,9,10,11]
我的code使用if-else语句来处理这两个条件。然后我用一个迭代要经过list2中的元素和List1中插入。
公共静态无效的主要(字串[] args)
{
ArrayList的<整数GT;数=新的ArrayList<整数GT;();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
//numbers.add(50);
//numbers.add(60);
//numbers.add(70); ArrayList的<整数GT; numbers2 =新的ArrayList<整数GT;(); numbers2.add(4);
numbers2.add(5);
numbers2.add(6);
numbers2.add(7);
numbers2.add(8);
numbers2.add(9);
numbers2.add(10);
numbers2.add(11); 的System.out.println(list1的:+数字);
的System.out.println(list2中:+ numbers2); 交错(数字,numbers2); 的System.out.println();
的System.out.println(组合+数字);
}公共静态无效的交错(ArrayList的<整数GT; list1的,ArrayList的<整数GT;列表2)
{
//获取该集合的迭代器
迭代器<整数GT; itr2 = list2.iterator(); //循环计数器
诠释计数= 1; //处理基于列表的初始大小
如果(list1.size()&GT = list2.size())
{
//通过第一阵列环的两个元素添加名单,从2个元素
而(itr2.hasNext())
{
//插入来自列表2元
list1.add(计数,itr2.next()); //请确保元素越来越善于加1,3,5,7,9,等
数=计+ 2;
}
}
否则如果(list1.size()&所述; list2.size())
{
//通过第一阵列环的两个元素添加名单,从2个元素
而(itr2.hasNext())
{
如果(计数< = list1.size())
{
//插入来自列表2元
list1.add(计数,itr2.next()); //请确保元素越来越善于加1,3,5,7,9,等
数=计+ 2;
}
其他
{
//在元素的其余部分填补列表2至list1的
list1.add(itr2.next());
}
}
}
}
你喜欢这个解决方案?
公共静态无效的主要(最终字串[] args){
ArrayList的<整数GT;数=新的ArrayList<整数GT;();
numbers.add(10); numbers.add(20); numbers.add(30); numbers.add(40);
//numbers.add(50); numbers.add(60); numbers.add(70); ArrayList的<整数GT; numbers2 =新的ArrayList<整数GT;();
numbers2.add(4); numbers2.add(5); numbers2.add(6); numbers2.add(7);
numbers2.add(8); numbers2.add(9); numbers2.add(10); numbers2.add(11); 的System.out.println(list1的:+数字);
的System.out.println(list2中:+ numbers2);
清单<整数GT;交错=交织(数字,numbers2); 的System.out.println(\\ nCombined:+交错);
}公共静态列表<整数GT;交错(
最终名单<整数GT; list1的,
最终名单<整数GT;列表2
){
清单<整数GT;结果
=新的ArrayList&所述;整数>(list1.size()+ list2.size()); 迭代器<整数GT; IT1 = list1.iterator();
迭代器<整数GT; IT2 = list2.iterator();
而(it1.hasNext()|| it2.hasNext()){
如果(it1.hasNext()){
result.add(it1.next());
}
如果(it2.hasNext()){
result.add(it2.next());
}
}
返回结果;
}
Homework: Looking for better strategy, or approach rather than complete code.
I'v got two arrayLists of integers under two conditions:
- the first list is bigger than the second
- the second list is larger than the first
My goal was to interleave elements of list2, into list1 under both conditions. I've created a method that does this, but I feel like I could be doing something better.
Here is the expected result for condition 1. Note that after the elements of list2 are exhausted, we leave the elements of list1 in place:
list1: [10, 20, 30, 40, 50, 60, 70]
list2: [4, 5, 6, 7]
Combined: [10, 4, 20, 5, 30, 6, 40, 7, 50, 60, 70]
Here is the expected result for condition 2. Since list2 has more elements, we append these elements to list1 after list1 is exhausted:
list1: [10, 20, 30, 40]
list2: [4, 5, 6, 7, 8, 9, 10, 11]
Combined: [10, 4, 20, 5, 30, 6, 40, 7, 8, 9, 10, 11]
My code uses an if-else statement to process both conditions. I then use an iterator to go through elements of list2 and insert them in list1.
public static void main(String[] Args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
//numbers.add(50);
//numbers.add(60);
//numbers.add(70);
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
numbers2.add(4);
numbers2.add(5);
numbers2.add(6);
numbers2.add(7);
numbers2.add(8);
numbers2.add(9);
numbers2.add(10);
numbers2.add(11);
System.out.println("list1: " + numbers);
System.out.println("list2: " + numbers2);
interleave(numbers, numbers2);
System.out.println();
System.out.println("Combined: " + numbers);
}
public static void interleave(ArrayList<Integer> list1, ArrayList<Integer> list2)
{
//obtain an iterator for the collection
Iterator<Integer> itr2 = list2.iterator();
//loop counter
int count = 1;
//handle based on initial size of lists
if(list1.size() >= list2.size())
{
//loop through the first array and add elements from list 2 after each element
while(itr2.hasNext())
{
//insert elements from list2
list1.add(count, itr2.next());
//make sure elements are getting added at 1, 3, 5, 7, 9, etc
count = count + 2;
}
}
else if(list1.size() < list2.size())
{
//loop through the first array and add elements from list 2 after each element
while(itr2.hasNext())
{
if(count <= list1.size())
{
//insert elements from list2
list1.add(count, itr2.next());
//make sure elements are getting added at 1, 3, 5, 7, 9, etc
count = count + 2;
}
else
{
//fill in the remainder of the elements from list2 to list1
list1.add(itr2.next());
}
}
}
}
Do you like this solution?
public static void main(final String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(10); numbers.add(20); numbers.add(30); numbers.add(40);
//numbers.add(50); numbers.add(60); numbers.add(70);
ArrayList<Integer> numbers2 = new ArrayList<Integer>();
numbers2.add(4); numbers2.add(5); numbers2.add(6); numbers2.add(7);
numbers2.add(8); numbers2.add(9); numbers2.add(10); numbers2.add(11);
System.out.println("list1: " + numbers);
System.out.println("list2: " + numbers2);
List<Integer> interleaved = interleave(numbers, numbers2);
System.out.println("\nCombined: " + interleaved);
}
public static List<Integer> interleave(
final List<Integer> list1,
final List<Integer> list2
) {
List<Integer> result
= new ArrayList<Integer>(list1.size() + list2.size());
Iterator<Integer> it1 = list1.iterator();
Iterator<Integer> it2 = list2.iterator();
while (it1.hasNext() || it2.hasNext()) {
if (it1.hasNext()) {
result.add(it1.next());
}
if (it2.hasNext()) {
result.add(it2.next());
}
}
return result;
}
这篇关于Java的:交错显示两个基于整数的ArrayList - &GT;好的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!