使用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 ...
随机推荐
- TFS2012独占签出设置
说明:TFS2012默认是可以多人签出同一个文件.如果要设为独占签出,请看下面操作步骤 1. 2. 3. 然后选择工作区---编辑---高级.最后如下图,在位置那里选择服务器. END
- 9、Dockerfile实战-Nginx
上一节我们详解Dockerfile之后,现在来进行实战.我们通过docker build来进行镜像制作. build有如下选项: [root@localhost ~a]# docker build - ...
- Jmeter(二十三)_插件扩展
Jmeter插件管理器 安装插件的方法有两种,一种是传统的方式,即官网下载,本地配置,重启jmeter.现在有一种快捷的方法可以自定义安装插件-插件管理器 JMeter 插件管理器的使用方法很简单:不 ...
- pyinstaller将python编写的打卡程序打包成exe
编写了一个简易的定时提醒下班打卡程序,python代码如下: #coding:utf-8 import time import datetime from tkMessageBox import * ...
- Hexo初体验
title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...
- Symfony中Doctrine对应的Mongodb数据类型 data type
1. hash 就是 json对象 2. collection 就是 数组 3. 若要知道如何使用referenceOne, referenceMany, embbedDocument等 主要查看: ...
- Java serialVersionUID作用和生成
序列化和反序列化Java是面向对象的语言,与其他语言进行交互(比如与前端js进行http通信),需要把对象转化成一种通用的格式比如json(前端显然不认识Java对象),从对象到json字符串的转换, ...
- Ajax实例OR技术原理 转自 (http://blog.csdn.net/evankaka )
摘要:AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX 是一种用于创建快速动态网页的 ...
- 2-Nineteenth Scrum Meeting-20151219
任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作 请假(数据库) 唐彬 和服务器老师交流讨论区后台接口 请假(数据库) 史烨轩 尝试使用downloadmanager对noti ...
- Daily Scrumming* 2015.12.16(Day 8)
一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1036 https://github.com/buaaclubs-team/temp-front/com ...