java单例模式等一些程序的写法....持续更新...
一、单例模式的写法:
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单例模式等一些程序的写法....持续更新...的更多相关文章
- Java日常错误及需要注意细节,持续更新......
记录日常工作中一些容易被忽视的错误及细节,持续更新...... 一.问题:HashMap<Long, String>中,用get(Integer key)取不到值 Map<Long, ...
- C#、Java中的一些小知识点总结(持续更新......)
前言:在项目中,有时候一些小的知识,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小知识点,以备用,并持续更新...... 1.禁用DataGridV ...
- Android 和 iOS 应用程序开发对比 [持续更新]
1.Android 用字典模式统一管理应用程序中UI上用到的所有字符串. 比如文本框的默认文本.按钮的名字等等.表现形式:XML文件 Android中 "@string/text_filed ...
- 微信小程序的坑(持续更新中)
参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的 ...
- 微信小程序入门(持续更新)
微信小程序的主要文件介绍: . js:脚本文件 .json:配置文件 .wxss:样式表文件 .wxml:页面 微信小程序差不多也是和mvc模式差不多的,采用数据和页面分离的模式,在js上写的数据可以 ...
- [置顶] 【其他部分 第一章 矩阵】The C Programming Language 程序研究 【持续更新】
其他部分 第一章 矩阵 一.矩阵的转置 问题描述: 编写函数,把给定的任意一个二维整型矩阵转换为其转置矩阵. 输入: 1 2 3 4 5 6 输出: 1 4 2 5 3 6 分析 题目要求编写一个 ...
- Java的一些良好习惯及细节------持续更新中...
1.在做条件判断时,不要将变量放在判断符的左边,这样做可以防止出现空指针异常,以字符串比较为例: String name = "Tom"; //这种方式不推荐,如果变量name为空 ...
- java与C#的基础语法区别--持续更新
1.判断字符串是否相等 java : equals()比较的是对象的内容(区分字母的大小写格式),但是如果使用“==”比较两个对象时,比较的是两个对象的内存地址,所以不相等.即使它们内容相等,但是不同 ...
- 2017.4.26 慕课网--Java 高并发秒杀API配置文件(持续更新)
新建项目,new maven project. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
随机推荐
- [转]VS2015编译的程序在其他机器上缺少msvcp120.dll
http://www.lai18.com/content/1159618.html 1. 今天分享一个自己在开发过程中遇到的困难. 用VS2015开发了一个windows客户端(win32项目),在自 ...
- lua劈分字符串方法及实例
由于工作项目需要,最近需要用lua来写一些脚本.然而lua并不想java那样有很多的好用的api,很多方法得我们自己来编写和封装,就比如今天碰到的劈分字符串,查找资料后只能自己写了一个. 代码如下 - ...
- 【SQL Server高可用性】数据库复制:SQL Server 2008R2中数据库复制
经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使用链接服务器+触发器,来实现数据同步,但当要同步的数据表比较多,那么可以考虑用数据库复制技术,来实现数据的同步. 一.使用场景 ...
- c# lambda表达式学习
1. 普通绑定: public void button1_Click(object sender, EventArgs e) { MessageBox.Show("ok"); } ...
- fib博弈
链接:https://www.nowcoder.com/acm/contest/77/G来源:牛客网 幼儿园开学了,为了让小盆友们能尽可能的多的享受假期.校长大人决定让小盆友分批到校,至于每批学生来 ...
- google搜索 site:pku.edu.cn inurl:aspx 即可查找所有动态网页 =====html(静态网页) asp(动态) jsp(动态) php(动态) cgi(网络程序) aspx(动态)
shodan shodan和我们国内的钟馗之眼是一种搜索引擎,他们区别于百度等引擎,他们只爬设备,只爬联网设备. 网址为: https://www.shodan.io/ Shodan,也有人把他叫撒旦 ...
- 获取div的高度
1.获取div的文档总高度(必须DOM操作): var scrollHeight=document.getElementById("inner").scrollHeight; // ...
- 如何在.Net的MySqlCommand里面使用MySql用户自定义变量?
Mysql使用@符号代表变量,但C#也恰好使用@代表用户自定义变量,这样两者就会正好冲突了. SELECT () AS rowId, u.*, r.RoleName FROM userinfo u L ...
- halcon之屌炸天的变形匹配(1)
在日常工程应用中,我们通常通过halcon的 shape-based matching(形状匹配)进行各种定位, 如以前文章介绍的这样,理解各个参数并灵活应用通常就能得到很好的匹配效果和匹配速度, 当 ...
- ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)
1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version ...