Java将数组随机分成几组_使用Arraylist将数组中元素随机均等乱序分为N个子数组...

使用Arraylist将数组中元素随机均等乱序分为N个子数组

觉得有用的话,欢迎一起讨论相互学习~

c8a597895237a09ffe2123824c14b080.png8611a7aff46786098b4f4e62a4f333be.pnge3fa8eb7b07286b650256b5033bef822.png

为了将数组中的元素 随机地 ,均等地, 不重复地 ,划分到N个子数组中

使用Arraylist将数组中的元素保存到ArrayList中,使用Collections.shuffle(ArrayList)对列表中的元素进行乱序处理

遍历元素,将指定个数的元素重新装载到list列表或数组中

示例

生成GC含量为50%的DNA序列

说明:GC含量反映一条DNA链的GC碱基占所有碱基的比例(其中DNA碱基由ACGT四种碱基构成)。

作法:

生成一条长度为bit的整型数组DNAindex,用以表示碱基索引。

将DNAindex数组中元素存储到Arraylist-listDNAindex中,使用 Collections.shuffle(listDNAindex)对其中元素进行乱序处理

将listDNAindex中元素分成两部分,前段部分存入A_T_list中-用以表示A_T碱基的索引,后段部分存入G_C_list中-用以表示G_C碱基的索引。

从 A_T = {'A', 'T'}和G_C = {'G', 'C'}中随机选择碱基按照A_T_list和G_C_list中的索引位置装填碱基到dna中。

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Random;

public class Mainfunction {

public static void main(String[] args) {

CreatePopulation createdna = new CreatePopulation();

char[] demo_dna = createdna.init();

String demoresultDNA = String.valueOf(demo_dna);

System.out.println("demoresultDNA :" + demoresultDNA);

System.out.println("A_T_index");

for (int j = 0; j < createdna.bit / 2; j++) {

System.out.print(createdna.A_T_list.get(j) + " ");

}

System.out.println(" ");

System.out.println("G_C_index");

for (int j = 0; j < createdna.bit / 2; j++) {

System.out.print(createdna.G_C_list.get(j) + " ");

}

}

}

class CreatePopulation {

int bit = 20;

int Num = 4;

//将DNAindex由数组模式转换为List列表模式表示为listDNAindex

List listDNAindex = new ArrayList();

//对于AT和GC分别用两个列表表示其位置的索引

List A_T_list = new ArrayList();

List G_C_list = new ArrayList();

char[] init() {

char[] A_T = {'A', 'T'};

char[] G_C = {'G', 'C'};

char[] dna = new char[bit];

int[] DNAindex = new int[bit];

for (int i = 0; i < bit; i++) {

DNAindex[i] = i;

}//初始化DNAindex,其中DNAindex可表示为{0,1,2,3,4,5...19}

for (Integer i : DNAindex) {

listDNAindex.add(i);

}

//对列表进行乱序处理--转换成列表进行处理主要是为了使用乱序功能和不重复的功能

Collections.shuffle(listDNAindex);

int arrayCount = 2; //分的组数

int arraySumCount = listDNAindex.size() / arrayCount; //每组数量

int startIndex = 0; //每组开始下标

for (int i = 0; i < listDNAindex.size(); i++) {

if (i == arraySumCount) {

for (int j = startIndex; j < i; j++) {

//将前1/2序列加入到A_T_list中

A_T_list.add(listDNAindex.get(j));

//java中ArrayList使用和python中list使用方式有些不同,其中元素的获取需要使用.get语句,

// 而python中元素的获取可以和数组一样直接使用下标索引

}

}

//如果到达最终索引

if (i == listDNAindex.size() - 1) {

//将后1/2序列加入到G_C_list中

for (int j = arraySumCount; j <= i; j++) {

G_C_list.add(listDNAindex.get(j));

}

}

}

for (int i = 0; i < A_T_list.size(); i++) {

int a = (int) (Math.random() * 2);

dna[A_T_list.get(i)] = A_T[a];

}

for (int i = 0; i < G_C_list.size(); i++) {

int a = (int) (Math.random() * 2);

dna[G_C_list.get(i)] = G_C[a];

}

return dna;

}

}

输出:

demoresultDNA :TATGTTCTACGGGTCCGTAG

A_T_index

17 4 2 18 7 0 5 1 13 8

G_C_index

14 12 9 11 10 6 19 16 3 15

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值