使用Arraylist将数组中元素随机均等乱序分为N个子数组
使用Arraylist将数组中元素随机均等乱序分为N个子数组
觉得有用的话,欢迎一起讨论相互学习~Follow Me
- 为了将数组中的元素 随机地 ,均等地, 不重复地 ,划分到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
使用Arraylist将数组中元素随机均等乱序分为N个子数组的更多相关文章
- JavaScript Array reverse 方法:颠倒数组中元素的顺序
在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...
- javascript中获取字符串或数组中元素的索引
有些时候,我们需要知道一个字符串中字符的位置,或者一个数组中元素的位置,这是就需要对该变量进行迭代操作. 对于数组,有两个方法indexOf和findIndex() , 需要注意的是,findInde ...
- js删除数组中元素 delete 和splice的区别
例如我有一个数组: var array = ["aa","dd","cc","aa"] ,我想删除这个数组的“dd”元素 ...
- 如何解决jersey框架中以json格式返回数组,当数组中元素一个时json格式不对
原文地址:http://www.cnblogs.com/swpk/p/3566536.html?utm_source=tuicool jersey 是oracle 出的一个较好的REST框架.使用此框 ...
- PHP 数组中取出随机取出指定数量子值集
#关键:array_rand() 函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组.#思路:先使用array_rand()随机取出所需数量键名,然后将这些键名指向 ...
- js删除数组中元素的方法
一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删 ...
- 根据Bool值挑选数组中元素
根据Bool值挑选数组中元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用Boolean类型的数组挑选一维数组中的值 使用一维Boolean数组选取数组中的特定元素,对应位置为True ...
- 黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:
package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[ ...
- JS中split使用方法和数组中元素的删除
JS中split使用方法和数组中元素的删除 JS中split使用方法 <script language="javascript"> function spli(){ d ...
随机推荐
- Excel读取Word Table元素
Option Explicit Sub Mian() Application.ScreenUpdating = False Application.DisplayAlerts = False Appl ...
- mac10.12.6系统使用cmake安装opencv3.3.0+opencv_contrib-3.3.0
brew与cmake brew安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ins ...
- ubuntu 下配置 开发环境
1. apache: sudo apt-get install apache2 安装好输入网址测试所否成功: http://localhost 2. mongo 已经安装好了 版本:2.4.8 ref ...
- PHP学习 例外和错误处理
<?phptry{ open_folder("C:\\book");}catch(Exception $ex) { echo 'Error Message:'.$ex-> ...
- PAT甲题题解-1048. Find Coins (25)-水
给n,m以及n个硬币 问,是否存在两个硬币面值v1+v2=m 因为面值不会超过500,所以实际上最多500个不同的硬币而已 #include <iostream> #include < ...
- 作业要求 20181204-5 Final阶段贡献分配规则及实施
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2479 贡献规则 贡献分分配规则: 组内一共八名同学,贡献分共计80分. ...
- "软件"和"软件工程"一词最早被谁提出?
1."softwar”:1953年Richard R.Carhart在备忘录中使用software一词2.软件工程 1968 年北大西洋公约组织在前联邦德国开会提出的 1968年秋季,NAT ...
- http和https的加密方式
BS盛行的今天有点网络只是很必要啊,首先需要个网络抓包工具wireshark, http:http通过三次握手来通信,握手过程看图1 https:https = http + ssl(secure s ...
- 安装visual studio过程
昨天上了一天课 ,晚上回到寝室就开始装visual studio这个软件,由于室友有安装包,免去了下载软件的时间,下面是装载软件的步骤: 点击安装,就可以了,安装完显示文件包失败,还以为是哪里弄错了, ...
- Final发布点评
1. 约跑App——nice!:为改进演示效果,本组使用摄像头实时采集投影的方式展示其作品,是一种演示的创新.本组重点放在了修改上次来着其他组发现的bug,不过新功能上好像没有加入多少,可能是保证软 ...