java什么组合,java方向web开发的常用框架组合有哪些
大家好,今天小编来为大家解答java什么组合这个问题,java方向web开发的常用框架组合有哪些很多人还不知道,现在让我们一起来看看吧!
Java实现通用组合算法
Java实现通用组合算法存在一个类似{}这样的集合经过取组合其他位置用非字母数字字符替代比如使用*号得到类似{******}这样的集合
现在有这样的需求
存在一个类似{}这样的集合经过取组合其他位置用非字母数字字符替代比如使用*号得到类似{******}这样的集合
还要求对于{******}这样的集合再次经过取组合其他位置用非字母数字字符替代比如使用*号得到类似{***************}这样的集合
对于这样的要求实现的思路如下
首先主要思想是基于信息编码原理通过扫描字符串将组合变为组合
其次对于每个数字字符串设置一个单线程在单线程类中设置一个List用来存放待处理数字字符串(可能含有*号或者不含有)中每个数字的(而非*号)索引位置值
再次设置BitSet来标志每个位置是否被*号替换得到新的组合字符串
最后在扫描原始待处理数字字符串的过程中根据设置的字符列表List中索引来操作BitSet对于每一个BitSet得到一个新的组合
使用Java语言实现如下
package 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;/***通用组合拆分类(基于单线程)*可以完成两种功能*第一可以将完全数字串拆分成为含有*号的字符串*例如输入集合{} Splitter类会遍历该集合对每个字符串创建一个SplitterThread*线程来处理如果是取组合即starCount==经过线程处理得到类似************等结果*第二根据从带有*号的字符串经过拆分过滤后得到的字符串集合对其中每一个字符串进行组合*例如输入集合取组合字符串集合{******}* CommonSplitter类会遍历该集合对每个带有*号的字符串创建一个SplitterThread*线程来处理如果是串组合即starCount==经过线程处理得到类似************等结果*@author时延军*/public class CommonSplitter{private int starCount;private boolean duplicate;private Collection filteredContainer;public Collection getFilteredContainer(){return filteredContainer;}/***构造一个Spilitter实例*@param container输入的待处理字符串集合*@param starCount如果对于长度为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){//根据指定是否去重的选择选择创建容器filteredContainer= Collections synchronizedSet(new HashSet());}else{filteredContainer= Collections synchronizedList(new ArrayList());}Iterator it= erator();while(it hasNext()){new Thread(new SplitterThread(it next() trim())) start();}try{Thread sleep();} catch(InterruptedException e){e printStackTrace();}}/***对一个指定的N场比赛的长度为N的单式投注字符串进行组合*输入单式投注注字符串string例如组合得到类似************结果的集合**@author时延军*/class SplitterThread implements Runnable{private char[] charArray;private int len;//数字字符的个数List occupyIndexList= new ArrayList();//统计字符串中没有带*的位置的索引private List container= new ArrayList();private BitSet startBitSet;//比特集合起始状态private BitSet endBitSet;//比特集合终止状态用来控制循环public SplitterThread(String string){this charArray= string toCharArray();this len= string replace(*) length();this startBitSet= new BitSet(len);this endBitSet= new BitSet(len);//初始化startBitSet左侧占满*符号int count=;//for(int i=; iif(charArray[i]!=*){if(count< starCount){this startBitSet set(i true);count++;}occupyIndexList add(i);}}//初始化endBit右侧占满*符号count=;for(int i= string length(); i>; i){if(charArray[i]!=*){if(count< starCount){this endBitSet set(i true);count++;}ccupyIndexList add(i);}}//根据起始startBitSet构造带*的组合字符串并加入容器char[] charArrayClone= this charArray clone();for(int i=; iif(this startBitSet get(i)){charArrayClone[i]=*;}}ntainer add(new String(charArrayClone));}public void run(){this split();synchronized(filteredContainer){filteredContainer addAll(ntainer);}}public void split(){while(!this startBitSet equals(this endBitSet)){int zeroCount=;//统计遇到后左边的个数int oneCount=;//统计遇到后左边的个数int pos=;//记录当前遇到的索引位置char[] charArrayClone= this charArray clone();//遍历startBitSet来确定出现的位置for(int i=; iif(!this startBitSet get(this occupyIndexList get(i))){zeroCount++;}if(this startBitSet get(this occupyIndexList get(i))&&!this startBitSet get(this occupyIndexList get(i+))){pos= i;oneCount= i zeroCount;//将变为 this startBitSet set(this occupyIndexList get(i) false);this startBitSet set(this occupyIndexList get(i+) true);break;}}//将遇到后左侧的全部移动到最左侧int count= Math min(zeroCount oneCount);int startIndex= this occupyIndexList get();int endIndex=;if(pos>&& count>){pos;endIndex= this occupyIndexList get(pos);for(int i=; ithis startBitSet set(startIndex true);this startBitSet set(endIndex false);startIndex= this occupyIndexList get(i+);pos;if(pos>){endIndex= this occupyIndexList get(pos);}}}//将遇到的位置用*替换for(int i=; iif(this startBitSet get(this occupyIndexList get(i))){charArrayClone[this occupyIndexList get(i)]=*;}}ntainer add(new String(charArrayClone));}}}}
测试用例如下所示
package shirdrn;import java util ArrayList;import java util Collection;import junit framework TestCase;import shirdrn util GoodTools;public class TestCommonSplitter extends TestCase{private CommonSplitter splitter;public void setSplitter(Collection container int starCount boolean duplicate){this splitter= new CommonSplitter(container starCount duplicate);}public void testSplliter(){Collection container= new ArrayList();container add(***);int starCount=;boolean duplicate= true;this setSplitter(container starCount duplicate);System out println(this splitter getFilteredContainer());}public void testSplliter(){Collection container= new ArrayList();container add(***);int starCount=;boolean duplicate= true;this setSplitter(container starCount duplicate);System out println(this splitter getFilteredContainer());assertEquals( this splitter getFilteredContainer() size());}public void testNoStar(){Collection container= new ArrayList();container add();int starCount=;boolean duplicate= true;this setSplitter(container starCount duplicate);System out println(this splitter getFilteredContainer());assertEquals( this splitter getFilteredContainer() size());}public void testSplitter_ _(){//场: String multiSeq=;Collection container= GoodTools getNSingleList(multiSeq);assertEquals( container size());int starCount=;boolean duplicate= false;this setSplitter(container starCount duplicate);assertEquals( this splitter getFilteredContainer() size());}}上述测试耗时大约 s左右
上述算法实现主要是针对两种条件进行实现的即
第一个是完全数字字符串——>带有*号的组合数字字符串
第二个带有*号的组合数字字符串——>在该基础上继续组合得到带有*号的组合数字字符串
lishixinzhi/Article/program/Java/hx/201311/25538java方向web开发的常用框架组合有哪些
java方向web开发的常用框架组合有哪些?
开源的几大框架就是 Struts hibernate spring这三个也是企业最经常拿来搭配的还有JSF啦webwork等一些较老的框架.
Java的web开发有哪些框架目前主流的javaWeb框架有:持久层hibernate、mybatie、ibaties,表示层主要是struts2、spring mvc,管理层spring、spring boot等。除了这些还有很多这样的框架,但是业界内用得较多的还是这几种,毕竟经过时间的洗礼,没有出现严重BUG。
厦门经纬盈创JAVA讲师整理有很多主流开源的Web框架例如Ext UI,Easy UI,DZW UI,Dojo UI,Mini UI(收费)。
基于java的web开发框架有哪些Spring系列常用的就有:SpringMVC SpringSecurity SpringDATA SpringJDBC等等
还有很多
go有哪些快速开发的web框架推荐使用 Faygo框架。使用者只需要定义一个struct Handler,就能自动系结、验证请求引数并生成线上API文件。因此,Faygo简单易用,程式码量少,开发效率高,非常合适开发API介面。并且 Faygo的Handler与Middleware完全相同,都是实现Handler,只是概念层面的区分。这在众Go Web框架之中实属首个!
要在应用程式中使用 AVFoundation,需要实现 AVPlayer并设定 allowsAirPlayVideo为 YES以开启 AirPlay,或者设定为NO以关闭 AirPlay,如以下程式码所示:-(BOOL)setAirPlay:(BOOL)airplayMode{ return self.player.allowsAirPlayVideo=airpla.
推荐五款开快速开发的Web框架,希望能够帮助题主,供大家一起交流学习。
1.专案名称:基于 Go的 Web框架 Faygo
专案简介:Faygo是一款快速、简洁的 Go Web框架,可用极少的程式码开发出高效能的 Web应用程式(尤其是API介面)。只需定义 struct Handler,Faygo就能自动系结、验证请求引数并生成线上API文件。
2.专案名称:基于 Go的 Web开发框架 essgo
专案简介:essgo是一款 Go语言开发的简单、稳定、高效、灵活的 web开发框架。它的专案组织形式经过精心设计,实现前后端分离、系统与业务分离,完美相容 MVC与 MVVC等多种开发模式,非常利于企业级应用与 API介面的开发。当然,最值得关注的是它突破性支援执行时路由重建,开发者可在 Admin后台轻松配置路由,并实现启用/禁用模组或操作、新增/移除中介软体等!同时,它以 ApiHandler与 ApiMiddleware为专案基本组成单元,可实现编译期或执行时的自由搭配组合,也令开发变得更加灵活富有趣味性。
3.专案名称:模组化设计的 Go Web框架 Macaron
专案简介:Macaron是一个具有高生产力和模组化设计的 Go Web框架。框架秉承了 Martini的基本思想,并在此基础上做出高阶扩充套件。
4.专案名称:基于Go的轻量级 Web框架 GoInk
专案简介:HxGo是基于我以往的 php开发经验编写的 Go Web框架。力求简单直接,符合大众编写习惯,同时效能优良。 HxGo基于 MVC的结构模式,实现 REST支援的自动路由分发,简化 HTTP请求和检视操作。同时,HxGo提供简易直接的资料访问层,高效直接操作资料库内容。
5.专案名称:简单高效的 Go web开发框架 Baa
专案简介:Baa是一个简单高效的 Go web开发框架。主要有路由、中介软体,依赖注入和HTTP上下文构成。Baa不使用反射和正则,没有魔法的实现。
特性:
支援静态路由、引数路由、组路由(字首路由/名称空间)和路由命名;
路由支援链式操作;
路由支援档案/目录服务;
中介软体支援链式操作;
支援依赖注入*;
支援 JSON/JSONP/XML/HTML格式输出;
统一的 HTTP错误处理;
统一的日志处理;
支援任意更换模板引擎(实现 baa.Renderer介面即可)。
revel如果有其他语言框架(RoR,Django)开发经验的话这个上手很快 beego开发介面很合适,网站也不错,不过框架设计不如revel现代一些 martini类: martini, macaron, gin, tango martini模组化,定制型好,效能不如beego,revel macaron相对martini.
revel如果有其他语言框架(RoR,Django)开发经验的话这个上手很快
beego开发介面很合适,网站也不错,不过框架设计不如revel现代一些
martini类: martini, macaron, gin, tango
martini模组化,定制型好,效能不如beego,revel
macaron相对martini效能更好些,路由系统更高阶些
gin是martini类中效能最好的,因为他即拥有martini类的模组化而且实现方式并不是用的反射机制所以效能好出一个量级,缺点是路由系统比较简单
Java实现几个字母的所有组合
1.先给你程序
public class Test{
public static void main(String[] args){
char buf[]={'a','b','c','d'};
perm(buf,0,buf.length-1);
}
public static void perm(char[] buf,int start,int end){
if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
for(int i=0;i<=end;i++){
System.out.print(buf[i]);
}
System.out.println();
}
else{//多个字母全排列
for(int i=start;i<=end;i++){
char temp=buf[start];//交换数组第一个元素与后续的元素
buf[start]=buf[i];
buf[i]=temp;
perm(buf,start+1,end);//后续元素递归全排列
temp=buf[start];//将交换后的数组还原
buf[start]=buf[i];
buf[i]=temp;
}
}
}
}
也可以以下方式实现,注意要修改NUM和MAIN中的数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test{
//将NUM设置为待排列数组的长度即实现全排列
private static int NUM= 4;
/**
*递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
*
*@param datas
*@param target
*/
private static void sort(List datas, List target){
if(target.size()== NUM){
for(Object obj: target)
System.out.print(obj);
System.out.println();
return;
}
for(int i= 0; i< datas.size(); i++){
List newDatas= new ArrayList(datas);
List newTarget= new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args){
String[] datas= new String[]{"a","b","c","d"};
sort(Arrays.asList(datas), new ArrayList());
}
}
2.学会GOOGLE,多GOOGLE,比如你的这个可以用这个关键字JAVA全排列
关于java什么组合,java方向web开发的常用框架组合有哪些的介绍到此结束,希望对大家有所帮助。