使用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 ...
随机推荐
- 大白话说Java泛型:入门、使用、原理
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...
- stl源码剖析 详细学习笔记 set map
// // set map.cpp // 笔记 // // Created by fam on 15/3/23. // // //---------------------------15/03 ...
- thinkphp3.2 批量添加数据
这是我遇到的thinkphp3.2 当中最让我无语的坑 批量添加数据有个方法是 addAll() 这个方法一定要注意数组的键名,一定要整齐!!! 可以在存入数据前,用ksort()方法将数组的键名排序 ...
- [T-ARA][결혼 하지마][不要结婚]
歌词来源:http://music.163.com/#/song?id=27808773 作曲 : 二段横踢 [作曲 : 二段横踢] 作词 : 二段横踢 [作词 : 二段横踢] Hey anybody ...
- 了不起的Node.js--之五 TCP连接
TCP连接 传输控制协议(TCP)是一个面向连接的协议,它保证了两台计算机之间数据传输的可靠性和顺序. TCP是一种传输层协议,它可以让你将数据从一台计算机完整有序地传输到另一台计算机. Node.j ...
- dubbo底层之Netty
背景 Java线程:由开始的单线程,到通过new Thread()创建的多线程,再到现如今的线程池,Java多线程编程的效率和性能有了很大的提升 Reactor模型:基于事件驱动,适合处理海量I/O事 ...
- 20135119_涂文斌 实验二 Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程: Java 班级:1351 姓名:涂文斌 学号:20135119 成绩: ...
- pdf修复
pdf工具下载地址: 链接:https://pan.baidu.com/s/1SgGSrH7apX64hQEl732wWg 提取码:kg5q 使用说明: 1.含注册命令,先注册再运行.
- C语言版本:双链表的实现
Dlist.h #ifndef __DLIST_H__ #define __DLIST_H__ #include<cstdio> #include<malloc.h> #inc ...
- 通俗易懂的word2Vec负采样理解
理解:http://www.shuang0420.com/2017/03/21/NLP%20%E7%AC%94%E8%AE%B0%20-%20%E5%86%8D%E8%B0%88%E8%AF%8D%E ...