Java的:交错显示两个基于整数的ArrayList - >好的方法? [英] Java: Interleave two integer based arraylists -> good approach?

查看:104
本文介绍了Java的:交错显示两个基于整数的ArrayList - >好的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

家庭作业:寻找更好的策略,或方法,而不是完整的code

我心中已经有整数两个的ArrayList两种情况下:


  1. 第一个列表比第二
  2. 更大
  3. 第二个列表比第一
  4. 较大

我的目标是既交错条件下列表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:

  1. the first list is bigger than the second
  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆