使用Arraylist將陣列中元素隨機均等亂序分為N個子陣列
阿新 • • 發佈:2019-01-08
使用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