Java中如何将一个数组分割成多个等长度的数组

时间:2024-10-09 22:38:11

Java中如何将一个数组分割成多个等长度的数组,最后剩下的为一个素组

  • 先看图
  • 分析数据
  • 提取公式
  • 分装代码

1.如下我们需求
最近朋友android项目中有一个需求如下:
这一个长集合[item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19, item20]
分割成下4个元素一组的小集合,剩下的为一个集合:
[item0, item1, item2, item3]
[item4, item5, item6, item7]
[item8, item9, item10, item11]
[item12, item13, item14, item15]
[item16, item17, item18, item19]
[item20]

2.数据分析

通过如上数据我们可以分析
	       第一个集合中:是索引index为:0-3          item0,item1,item2,item3
	       第二个集合中:是索引index为:4-7          ...... 
	       第三个集合中:是索引index为:8-11
	       第四个集合中:是索引index为:12-15
	       第五个集合中:是索引index为:16-19
	       第六个集合中:是索引index为:20           itme20  
 
  如上我们发现0  4  8  12   16   20
         可知道规律:i*4为第一个索引第二个为 i*4+3
         我们总共遍历的次数应该是我们最后获得集合的个数所以()/4作为遍历长度。
         集合有一个方法List<E> subList(int fromIndex, int toIndex)可以截取获取集合
         如上我们可以得出

       for (int j = 0; j < () /4 + 1; j++) {
            if ((j * 4 + 4) < ()) {
                ((j * 4, j * 4 + 4));
            } else if ((j * 4 + 4) > ()) {
                ((j * 4, ()));
            } else if (() <4) {
                ((0, ()));
            }
        }
    ```
运行结果如下:
   [item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19, item20]
	[item0, item1, item2, item3]
	[item4, item5, item6, item7]
	[item8, item9, item10, item11]
	[item12, item13, item14, item15]
	[item16, item17, item18, item19]
	[item20]     
	       
  这里需要考虑这个如果长集合是8个元素呢!上面代码运行之后如下:
       长数组:[item0, item1, item2, item3, item4, item5, item6, item7]
       //运行结果:如下两个数组
			[item0, item1, item2, item3]
			[]
         ()/4是否能够被整除,如果是4的倍数,那么会出现空集合问题。希望自己测试看看。所以这里需要
         ()%4判断是否被整除。
         代码如下:
         if( ()%4!=0) {
        for (int j = 0; j < () / 4 + 1; j++) {
            if ((j * 4 + 4) < ()) {
                ((j * 4, j * 4+ 4));//0-3,4-7,8-11    j=0,j+3=3   j=j*3+1
            } else if ((j * 4 + 4) > ()) {
                ((j * 4, ()));
            } else if (() <4) {
                ((0, ()));
            }
        }
    }else if(()%4==0){
        for (int j = 0; j < () / 4; j++) {
            if ((j * 4 + 4) <= ()) {
                ((j *4, j * 4 + 4));//0-3,4-7,8-11    j=0,j+3=3   j=j*3+1
            } else if ((j * 4+ 4) > ()) {
                ((j *4, ()));
            } else if (() < 4) {
                ((0, ()));
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

最后封装代码

package ;

import ;
import ;

/**
 * Created by 路很长~ on 2018/1/10.
 */

public class Mtext {
    public static void main(String[] args){
        //这里的数字是买一个数组的长度
        getList(4);

    }

    private static void getList(int targ) {
        List<String> mList=new ArrayList<String>();
        List<List<String>>mEndList=new ArrayList<>();
        for (int i = 0; i<21; i++){
            ("item"+i);
        }
        (());
        if( ()%targ!=0) {
            for (int j = 0; j < () / targ + 1; j++) {
                if ((j * targ + targ) < ()) {
                    ((j * targ, j * targ + targ));//0-3,4-7,8-11    j=0,j+3=3   j=j*3+1
                } else if ((j * targ + targ) > ()) {
                    ((j * targ, ()));
                } else if (() < targ) {
                    ((0, ()));
                }
            }
        }else if(()%targ==0){
            for (int j = 0; j < () / targ; j++) {
                if ((j * targ + targ) <= ()) {
                    ((j * targ, j * targ + targ));//0-3,4-7,8-11    j=0,j+3=3   j=j*3+1
                } else if ((j * targ+ targ) > ()) {
                    ((j * targ, ()));
                } else if (() < targ) {
                    ((0, ()));
                }
            }
        }
        for (int i = 0; i < (); i++) {
            ((i).toString()+"");
        }
    }
}


运行结果:
  
[item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19, item20]
结果:
[item0, item1, item2, item3]
[item4, item5, item6, item7]
[item8, item9, item10, item11]
[item12, item13, item14, item15]
[item16, item17, item18, item19]
[item20]












  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73