使用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个子数组的更多相关文章

  1. JavaScript Array reverse 方法:颠倒数组中元素的顺序

    在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...

  2. javascript中获取字符串或数组中元素的索引

    有些时候,我们需要知道一个字符串中字符的位置,或者一个数组中元素的位置,这是就需要对该变量进行迭代操作. 对于数组,有两个方法indexOf和findIndex() , 需要注意的是,findInde ...

  3. js删除数组中元素 delete 和splice的区别

    例如我有一个数组: var array = ["aa","dd","cc","aa"] ,我想删除这个数组的“dd”元素 ...

  4. 如何解决jersey框架中以json格式返回数组,当数组中元素一个时json格式不对

    原文地址:http://www.cnblogs.com/swpk/p/3566536.html?utm_source=tuicool jersey 是oracle 出的一个较好的REST框架.使用此框 ...

  5. PHP 数组中取出随机取出指定数量子值集

    #关键:array_rand() 函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组.#思路:先使用array_rand()随机取出所需数量键名,然后将这些键名指向 ...

  6. js删除数组中元素的方法

    一.清空数组 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即被清空了 二.删 ...

  7. 根据Bool值挑选数组中元素

    根据Bool值挑选数组中元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用Boolean类型的数组挑选一维数组中的值 使用一维Boolean数组选取数组中的特定元素,对应位置为True ...

  8. 黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:

    package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[ ...

  9. JS中split使用方法和数组中元素的删除

    JS中split使用方法和数组中元素的删除 JS中split使用方法 <script language="javascript"> function spli(){ d ...

随机推荐

  1. stl源码剖析 详细学习笔记stack queue

    // //  stack.cpp //  笔记 // //  Created by fam on 15/3/15. // // //---------------------------15/03/1 ...

  2. 微信小程序初体验与DEMO分享

    前言 前一段时间微信公布小程序,瞬间引来了大量的关注.博主的公司也将其定为目标之一,遂派本菜为先头兵(踩坑侠). 这次开发了一个比较完整的DEMO,模仿自某个APP首页,由于保护隐私的目的我把数据拷贝 ...

  3. 加速github、kaggle访问、加速python packge下载更改源

    OS: WIN10 加速github.kaggle访问 使用站长DNS工具(http://tool.chinaz.com/dns) 查询响应速度最快的网站服务器IP,将网站服务器IP和域名添加到电脑h ...

  4. ini_set的用法介绍

    https://www.cnblogs.com/xieqian111/p/5367732.html

  5. 《Linux内核分析与设计》读书笔记二

    第五章 5.1 与内核通信57 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 首先它为用户空间提供了一种硬件的抽象接口,举例来说当需要读写文件的时候,应用程序就可以不去管 ...

  6. final 评论 II

    第二次评论内容: 1.Nice!小组的约跑app: 项目内容足够丰富,在展示时也很好的体现了app的功能,可以满足所提出的需求.在展示的过程中表述所占比例较小,希望能够以更多的讲述过程完善用户理解的功 ...

  7. [搜狐科技]由浅入深理解Raft协议

    由浅入深理解Raft协议 2017-10-16 12:12操作系统/设计 0 - Raft协议和Paxos的因缘 读过Raft论文<In Search of an Understandable ...

  8. Windows 下面的 redis GUI操作工具

    1. 下载地址 redisdesktop https://redisdesktop.com/download 2. 下载windows版本并且进行安装 处理redis 的参数 根据上面的一篇博客 采取 ...

  9. Python学习---------登陆系统代码实现

    题目要求: 一.编写登陆入口 1.输入用户名密码 2.认证成功后显示欢迎的信息 3.输错三次后锁定 Readme: 1.本次实现了登陆系统,若锁定就输出为锁定用户(锁定信息保存在user_lock.t ...

  10. c#将文件复制到某个文件夹内winform文件复制

    try { //系统盘 string nl = Environment.NewLine; string query = "%SystemRoot%"; string str = E ...