亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

java語(yǔ)言

java通用組合算法如何實(shí)現(xiàn)

時(shí)間:2024-09-12 04:05:41 java語(yǔ)言 我要投稿
  • 相關(guān)推薦

java通用組合算法如何實(shí)現(xiàn)

  Java是一個(gè)純的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它繼承了 C++ 語(yǔ)言面向?qū)ο蠹夹g(shù)的核心,Java舍棄了C ++語(yǔ)言中容易引起錯(cuò)誤的指針(以引用取代)、運(yùn)算符重載(operator overloading)、多重繼承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的對(duì)象所占據(jù)的內(nèi)存空間,使得程序員不用再為內(nèi)存管理而擔(dān)憂。以下是小編為大家搜索整理的java通用組合算法如何實(shí)現(xiàn),希望能給大家?guī)?lái)幫助!更多精彩內(nèi)容請(qǐng)及時(shí)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  存在一個(gè)類(lèi)似{31311133,33113330}這樣的集合,經(jīng)過(guò)8取5組合,其他位置用非字母數(shù)字字符替代,比如使用*號(hào),得到類(lèi)似{3***1133,***13330,... ...}這樣的集合;

  還要求對(duì)于{3***1133,***13330}這樣的集合,再次經(jīng)過(guò)5取3組合,其他位置用非字母數(shù)字字符替代,比如使用*號(hào),得到類(lèi)似{*****133,*****330,3***1*3*,... ...}這樣的集合。

  對(duì)于這樣的要求,實(shí)現(xiàn)的思路如下:

  首先,主要思想是基于信息編碼原理,通過(guò)掃描字符串,將10組合變?yōu)?1組合。

  其次,對(duì)于每個(gè)數(shù)字字符串,設(shè)置一個(gè)單線程,在單線程類(lèi)中設(shè)置一個(gè)List用來(lái)存放待處理數(shù)字字符串(可能含有*號(hào),或者不含有)中每個(gè)數(shù)字的(而非*號(hào))索引位置值;

  再次,設(shè)置BitSet來(lái)標(biāo)志每個(gè)位置是否被*號(hào)替換得到新的組合字符串。

  最后,在掃描原始待處理數(shù)字字符串的過(guò)程中,根據(jù)設(shè)置的字符列表List中索引,來(lái)操作BitSet,對(duì)于每一個(gè)BitSet得到一個(gè)新的組合。

  使用Java語(yǔ)言實(shí)現(xiàn)如下:

  package org.shirdrn;

  import java.util.ArrayList;

  import java.util.BitSet;

  import java.util.Collection;

  import java.util.Collections;

  import java.util.HashSet;

  import java.util.Iterator;

  import java.util.List;

  /**

  * 通用組合拆分類(lèi)(基于單線程)

  *

  * 可以完成兩種功能:

  *

  * 第一,可以將完全數(shù)字串拆分成為含有*號(hào)的字符串。

  * 例如:輸入集合{31311133,33113330},Splitter類(lèi)會(huì)遍歷該集合,對(duì)每個(gè)字符串,創(chuàng)建一個(gè)SplitterThread

  * 線程來(lái)處理,如果是2取1組合,即starCount=8-2=6,經(jīng)過(guò)線程處理得到類(lèi)似******33,*****1*3等結(jié)果

  *

  * 第二,根據(jù)從帶有*號(hào)的字符串經(jīng)過(guò)拆分過(guò)濾后得到的字符串集合,對(duì)其中每一個(gè)字符串進(jìn)行組合

  * 例如:輸入集合5取1組合字符串集合{3***1133,***113330}

  *

  * CommonSplitter類(lèi)會(huì)遍歷該集合,對(duì)每個(gè)帶有*號(hào)的字符串,創(chuàng)建一個(gè)SplitterThread

  * 線程來(lái)處理,如果是2串1組合,即starCount=8-3-2=3,經(jīng)過(guò)線程處理得到類(lèi)似******33,*****1*3等結(jié)果

  *

  * @author 時(shí)延軍

  *

  */

  public class CommonSplitter {

  private int starCount;

  private boolean duplicate;

  private Collection filteredContainer;

  public Collection getFilteredContainer() {

  return filteredContainer;

  }

  /**

  * 構(gòu)造一個(gè)Spilitter實(shí)例

  *

  * @param container 輸入的待處理字符串集合

  * @param starCount 如果對(duì)于長(zhǎng)度為N的數(shù)字字符串,進(jìn)行M組合(即N取M),則starCount=N-M

  * @param duplicate 是否去重

  */

  public CommonSplitter(Collection container, int starCount, boolean duplicate) {

  this.duplicate = duplicate;

  this.starCount = starCount;

  if(this.duplicate) { // 根據(jù)指定是否去重的選擇,選擇創(chuàng)建容器

  filteredContainer = Collections.synchronizedSet(new HashSet());

  }

  else {

  filteredContainer = Collections.synchronizedList(new ArrayList());

  }

  Iterator it = container.iterator();

  while(it.hasNext()) {

  new Thread(new SplitterThread(it.next().trim())).start();

  }

  try {

  Thread.sleep(50);

  } catch (InterruptedException e) {

  e.printStackTrace();

  }

  }

【java通用組合算法如何實(shí)現(xiàn)】相關(guān)文章:

java中全排列是如何生成算法04-03

java的繼承與組合的區(qū)別07-19

關(guān)于Java動(dòng)態(tài)實(shí)現(xiàn)的方法04-02

PID算法的C語(yǔ)言實(shí)現(xiàn)12-04

java如何構(gòu)造12-11

實(shí)現(xiàn)java屏幕抓屏的方法03-27

Java常用的五大排序算法04-18

新手如何學(xué)習(xí)Java07-06

如何學(xué)習(xí)JAVA開(kāi)發(fā)04-26