使用Arraylist将数组中元素随机均等乱序分为N个子数组
时间:2022-07-23
本文章向大家介绍使用Arraylist将数组中元素随机均等乱序分为N个子数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 为了将数组中的元素 随机地 ,均等地, 不重复地 ,划分到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<Integer> listDNAindex = new ArrayList<Integer>();
//对于AT和GC分别用两个列表表示其位置的索引
List<Integer> A_T_list = new ArrayList<Integer>();
List<Integer> G_C_list = new ArrayList<Integer>();
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
- MatrixTree速成
- 1元搭建自己的云服务器&解析域名
- 洛谷P4180 [Beijing2010组队]次小生成树Tree
- 携程开源数据库访问框架
- LOJ #108. 多项式乘法
- 【作业】HansBug的前三次OO作业分析与小结
- 【备忘】Idea的那些事
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
- win10下vagrant+centos7 rails虚拟开发机配置流程
- 再免费多看一章--k-means++
- 面向对象先导课感想
- 【LATEX】个人版latex论文模板
- 【前端】wangEditor(富文本编辑器) 简易使用示例
- 【前端】ACE Editor(代码编辑器) 简易使用示例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法