一、单例模式的写法:

public class MyFactory {
/**
* 饿汉式
*/
private static MyFactory instance = new MyFactory(); private MyFactory(){ } public static MyFactory getInstance(){
return instance;
}
}
public class MyFactory {

    /**
* 懒汉式(要注意处理线程安全问题)
*/
private static MyFactory instance; public static MyFactory getInstance(){
if(instance == null){
synchronized(MyFactory.class){
if(instance == null){
instance = new MyFactory();
}
}
} return instance;
}
}

二、选择排序算法:

package com.cy.array;

public class selectionSort {
/**
* 外层循环每遍历一次,就把最小的数选出来。
* 这是选择排序算法。
* @param args
*/
public static void main(String[] args) {
int a[] = {2, 4, 6, 7, 3, 5, 1, 9, 8}; for(int i=0; i<a.length; i++){
for(int j=i+1; j<a.length; j++){
if(a[j] < a[i]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
} for(int i=0; i<a.length; i++){
System.out.print(a[i] + " ");
}
} }

上面的选择排序算法有待改进的空间,因为:

4 和 3 这次的交换没必要;

应该是:找到比4小的3,然后拿3后面的数和3进行比较,如果还找到比3小的2,那么再拿2后面的数和2比较..,不断找到最小的那个数,

然后直接拿最小的那个数和4交换就完了。

程序改写:

package com.cy.array;

public class selectionSort2 {
public static void main(String[] args) {
int a[] = {2, 4, 6, 7, 3, 5, 1, 9, 8}; /**
* 用k记录最小数的位置;
* 假设第一次找到最小数的位置就是i;
* 如果k位置后面的a[j]比a[k]还小,就更新k的位置;
*
* 做完内层循环之后,如果找到最小位置k 不是 刚开始定义的位置i,发生一次交换
*/
for(int i=0; i<a.length; i++){
int k = i;
for(int j=k+1; j<a.length; j++){
if(a[j] < a[k]){
k = j;
}
} if(k != i){
int temp = a[i];
a[i] = a[k];
a[k] = temp;
} } for(int i=0; i<a.length; i++){
System.out.print(a[i] + " ");
}
} }

三、冒牌排序算法:

package com.cy.array;

public class BubbleSort {
public static void main(String[] args) {
int a[] = {2, 4, 6, 7, 3, 5, 1, 9, 8}; /**
*
*
* 下标值只能到长度-1,所以i=a.length-1;
*/
for(int i=a.length-1; i>=1; i--){
for(int j=0; j<=i-1; j++){
if(a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
} for(int i=0; i<a.length; i++){
System.out.print(a[i] + " ");
}
}
}

四、二分法查找:

package com.cy.array;

public class BinarySearch {
public static void main(String[] args) {
int a[] = {1, 3, 6, 8, 9, 10, 12, 18, 20, 34};
int i = 12; //查找i=12,在a数组中的位置
System.out.println(binarySearch(a, i));
} /**
* 二分法查找算法
* 搜索一般是建立在排好序的基础之上;
* 二分法查找, 思路:
* 把数组排好序,将被查找数与数组中间位置的数进行比较;
* 如果 = 中间位置的数,返回该中间位置;
* 如果 > 中间位置的数,继续从右半边部分开始找..
* 如果 < 中间位置的数,继续从左半边部分开始找..
* @param a
* @param num
* @return
*/
public static int binarySearch(int a[], int num){
if(a.length == 0){
return -1;
} int start = 0;
int end = a.length - 1;
int m = (start + end) / 2 ; while(start <= end){
if(num == a[m]){
return m;
}else if(num < a[m]){
end = m - 1;
}else if(num > a[m]){
start = m + 1;
} m = (start + end) / 2;
} return -1;
}
}

--------------

java单例模式等一些程序的写法....持续更新...的更多相关文章

  1. Java日常错误及需要注意细节,持续更新......

    记录日常工作中一些容易被忽视的错误及细节,持续更新...... 一.问题:HashMap<Long, String>中,用get(Integer key)取不到值 Map<Long, ...

  2. C#、Java中的一些小知识点总结(持续更新......)

    前言:在项目中,有时候一些小的知识,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小知识点,以备用,并持续更新...... 1.禁用DataGridV ...

  3. Android 和 iOS 应用程序开发对比 [持续更新]

    1.Android 用字典模式统一管理应用程序中UI上用到的所有字符串. 比如文本框的默认文本.按钮的名字等等.表现形式:XML文件 Android中 "@string/text_filed ...

  4. 微信小程序的坑(持续更新中)

    参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的 ...

  5. 微信小程序入门(持续更新)

    微信小程序的主要文件介绍: . js:脚本文件 .json:配置文件 .wxss:样式表文件 .wxml:页面 微信小程序差不多也是和mvc模式差不多的,采用数据和页面分离的模式,在js上写的数据可以 ...

  6. [置顶] 【其他部分 第一章 矩阵】The C Programming Language 程序研究 【持续更新】

    其他部分 第一章 矩阵 一.矩阵的转置   问题描述: 编写函数,把给定的任意一个二维整型矩阵转换为其转置矩阵. 输入: 1 2 3 4 5 6 输出: 1 4 2 5 3 6 分析 题目要求编写一个 ...

  7. Java的一些良好习惯及细节------持续更新中...

    1.在做条件判断时,不要将变量放在判断符的左边,这样做可以防止出现空指针异常,以字符串比较为例: String name = "Tom"; //这种方式不推荐,如果变量name为空 ...

  8. java与C#的基础语法区别--持续更新

    1.判断字符串是否相等 java : equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个对象的内存地址,所以不相等.即使它们内容相等,但是不同 ...

  9. 2017.4.26 慕课网--Java 高并发秒杀API配置文件(持续更新)

    新建项目,new maven project. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

随机推荐

  1. Xshell5 访问虚拟机Ubuntu16.04

    1.Ubuntu安装telnet 安装openbsd-inetd sudo apt-get install openbsd-inetd 安装telnetd sudo apt-get install t ...

  2. SpringBoot使用Redis数据库

    (1)pom.xml文件引入jar包,如下: <dependency> <groupId>org.springframework.boot</groupId> &l ...

  3. .net core开发 (一)

    1..net core: 是微软开发的另外一个可以跨平台的.net 2..net framework,.net core, mono的关系三者都是.net在不同操作系统的实现 3. .net core ...

  4. JVM知识总结-运行时区域划分

    区域简介 JVM运行时区域有些随着虚拟机进程的启动而存在,有些依赖于用户线程的启动和结束而建立和销毁,大致分为以下几类:方法区,虚拟机栈,本地方法栈,堆,程序计数器,概念图如下(源于<深入理解J ...

  5. django使用bootstrap快速美化 admin后台

    使用django-admin-bootstrappe快速美化后台 两步: 1.pip install django-admin-bootstrapped  安装应用 2.在setting.py里面添加 ...

  6. Rails 5 Test Prescriptions 第7章 double stub mock

    https://relishapp.com/rspec/rspec-mocks/v/3-7/docs/basics/test-doubles 你有一个问题,如果想为程序添加一个信用卡程序用于自己挣钱. ...

  7. mybatis之org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'time' in 'class java.lang.String'

    mybatis接口 List<String> getUsedCate(String time); 配置文件 <select id="getUsedCate" pa ...

  8. hdu2883

    题解: 网络流 用一个离散化 代码: #include<cstdio> #include<cstring> #include<algorithm> using na ...

  9. Java——三大特性

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  10. ASPX 后台调用前台Js

    1.UpdatePanel 使用中 protected void Button1_Click(object sender, EventArgs e) { this.Label1.Text = &quo ...