首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

JAVA写一个冒泡排序

一:实现思想: 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 二:实现代码: 1 package bulubulu; 2 3 public class Maopao { 4 private static int [] a={12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; 5 static int temp=0;//一个临时存放点 6 public static void main(String[] args) { 7 for (int i = 0; i < a.length; i++) { 8 for (int j = 0; j < a.length; j++) { 9 if(a[j]>a[i]){//相邻的两个数依次进行比较,如果先改变正序或反序,可以改变大小于 10 temp=a[j]; 11 a[j]=a[i];//在三行进行一个值的移动替换 12 a[i]=temp; 13 } 14 } 15 } 16 for (int i = 0; i < a.length; i++) { 17 System.out.println(a[i]); 18 } 19 } 20 } 冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量; 缺点:效率不高 (如果一个数组有n个数,那么排序完成后需要比较n*(n-1)/2次); 欢迎大家一起说出自己的想法。

优秀的个人博客,低调大师

JAVA中的设计模式三(策略模式)

问题: 如何让算法和对象分开来,使得算法可以独立于使用它的客户而变化? 方案: 把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。比如定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可独立于使用它的客户而变化。这就是策略模式。 适用情况: 许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。 优点: 1、可以动态的改变对象的行为 缺点: 1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类 2、策略模式将造成产生很多策略类 应用: 我们平时出行的方式:出行方式有很多种,具体用哪一种根据动态的选择; 首先创建我们的抽象行为类,和具体的行为类; 1 package strategy;//策略模式 2 3 //抽象的行为类 4 public interface Strategy { 5 public void go();//出行方式 6 } 7 8 9 10 11 package strategy; 12 13 public class ConcreteStrategy1 implements Strategy {//具体的出行方式 14 15 @Override 16 public void go() { 17 // TODO Auto-generated method stub 18 System.out.println("坐公交车!"); 19 } 20 21 } 22 23 24 25 26 27 package strategy; 28 29 public class ConcreteStrategy2 implements Strategy {//具体的出行方式 30 31 @Override 32 public void go() { 33 // TODO Auto-generated method stub 34 System.out.println("自驾车!"); 35 } 36 } 然后创建一个调用者,也就是使用者,把能使用的行为给导入进来; 1 package strategy; 2 3 public class Context {//环境类其实也就是一个调用类,出行的人 4 private Strategy s; 5 6 public Context(Strategy s) { 7 super(); 8 this.s = s; 9 } 10 public void operate(){ 11 s.go(); 12 } 13 } 最后就是进行出行了; 1 package strategy; 2 3 public class Test { 4 public static void main(String[] args) { 5 Context c =new Context(new ConcreteStrategy1()); 6 c.operate(); 7 8 c =new Context(new ConcreteStrategy2()); 9 c.operate(); 10 } 11 } 欢迎大家一起说出自己的想法。

优秀的个人博客,低调大师

JAVA中的设计模式二(工厂模式)

工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。 工厂模式主要有: 简单工厂模式,工厂方法,抽象工厂; 简单工厂: 又叫静态工厂,是工厂模式三中状态中结构最为简单的。主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例。我们来看一个具体的例子: 如下面价单的图形 代码如下:首先我们先创建一个抽象的产品: 1 package Factory; 2 3 public abstract class BMW { 4 5 public BMW() { 6 } 7 8 } 然后我们具体的产品类去继承我们的抽象产品: 1 public class BMW320 extends BMW{ 2 public BMW320() { 3 // TODO Auto-generated constructor stub 4 System.out.println("生产BMW320"); 5 } 6 } 7 8 9 10 11 12 public class BMW523 extends BMW{ 13 public BMW523() { 14 // TODO Auto-generated constructor stub 15 System.out.println("生产BMW523"); 16 } 17 } 下面我们创建我们的工厂: 1 package Factory; 2 3 public class Factory { 4 public BMW crateBMW(int type){ 5 if(type==320){ 6 return new BMW320(); 7 }else if (type==523){ 8 return new BMW523(); 9 }else{ 10 return null; 11 } 12 } 13 } 下面就是客户了,客户需要产品,我们进行生产: 1 package Factory; 2 3 public class Customer { 4 public static void main(String[] args) { 5 Factory f=new Factory(); 6 BMW b320=f.crateBMW(320); 7 BMW b523=f.crateBMW(523); 8 } 9 } 运行的结果如下-----: 这个就是简单的工厂模式; 上面的代码告诉我们,简单工厂并不简单,它是整个模式的核心,一旦他出了问题,整个模式都将受影响而不能工作,为了降低风险和为日后的维护、扩展做准备,我们需要对它进行重构,引入工厂方法。 工厂方法: 工厂方法其实就是,不同额工厂对应不同的产品,就算其中某一个工厂不能正常工作了,也不会影响到其他的工厂工作; 首先我们先创建 产品接口和对应的具体产品 1 public interface Product { 2 3 } 4 5 6 public class Washer implements Product{ 7 8 public Washer() { 9 System.out.println("洗衣机被制造了"); 10 } 11 12 } 13 14 15 16 public class AirCondition implements Product{ 17 18 public AirCondition() { 19 System.out.println("空调被制造了"); 20 } 21 } 然后我们再创建 工厂接口和对应的具体生产不同商品的工厂 public interface Factory { } public class WasherFactory implements Factory{ public Product make(){ return new Washer(); } } public class AirConditionFactory implements Factory{ public Product make(){ return new AirCondition(); } } 最后就是顾客了, 1 package Factory2; 2 3 public class Customer { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 8 WasherFactory f=new WasherFactory(); 9 Product w=f.make(); 10 11 AirConditionFactory f2=new AirConditionFactory(); 12 Product w2=f2.make(); 13 } 14 } 运行的结果为: 可以理解为:有了很多个工厂方法,自己需要哪一个产品,就调用当前产品的工厂方法,获取相应的具体实例。 从上面创建产品对象的代码可以看出,工厂方法和简单工厂的主要区别是,简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。但工厂方法也有他局限的地方,那就是当面对的产品有复杂的等级结构的时候,例如,工厂除了生产家电外产品,还生产手机产品,这样一来家电是手机就是两大产品家族了,这两大家族下面包含了数量众多的产品,每个产品又有多个型号,这样就形成了一个复杂的产品树了。如果用工厂方法来设计这个产品家族系统,就必须为每个型号的产品创建一个对应的工厂类,当有数百种甚至上千种产品的时候,也必须要有对应的上百成千个工厂类,这就出现了传说的类爆炸,对于以后的维护来说,简直就是一场灾难..... 抽象方法: 抽象工厂:意的意图在于创建一系列互相关联或互相依赖的对象。我自己觉得抽象工厂是在工厂方法的基础上引进了分类管理的概念....工厂方法用来创建一个产品,它没有分类的概念,而抽象工厂则用于创建一系列产品,所以产品分类成了抽象工厂的重点,我们继续用上面的例子来说明:工厂生产的所有产品都用都用大写字母来标明它们的型号,比如冰箱,就有“冰箱-A",“冰箱-B",同样,其他的产品也都是遵守这个编号规则,于是就有了一下产品家族树 首先:我们创造不同的 电视和鼠标的接口: 1 public interface TV { 2 } 3 4 5 public interface Mouse { 6 7 } 然后我们创造冰箱和鼠标的不同的品种: 1 public class TV_A implements TV{ 2 3 public TV_A() { 4 System.out.println("A型TV"); 5 } 6 7 } 8 9 10 public class TV_B implements TV{ 11 12 public TV_B() { 13 System.out.println("B型TV"); 14 } 15 16 } 17 18 19 public class Mouse_A implements Mouse{ 20 21 public Mouse_A() { 22 System.out.println("A型鼠标"); 23 } 24 25 } 26 27 28 public class Mouse_B implements Mouse{ 29 30 public Mouse_B() { 31 System.out.println("B型鼠标"); 32 } 33 34 } 最后就等到了不同类型的工厂,生产不同类型的产品。如A工厂只生产A类型的产品 public class Factory_A implements Factory{ @Override public TV createTv() { // TODO Auto-generated method stub return new TV_A(); } @Override public Mouse createMouse() { // TODO Auto-generated method stub return new Mouse_A(); } } public class Factory_B implements Factory{ @Override public TV createTv() { // TODO Auto-generated method stub return new TV_B(); } @Override public Mouse createMouse() { // TODO Auto-generated method stub return new Mouse_B(); } } 最后就是测试类: 1 package Foctory3; 2 3 public class Customer { 4 public static void main(String[] args) { 5 Factory f=new Factory_A(); 6 f.createTv(); 7 f.createMouse(); 8 9 f=new Factory_B(); 10 f.createTv(); 11 f.createMouse(); 12 } 13 } 运行结果如图所示: 欢迎大家一起说出自己的想法。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册