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 ...
随机推荐
- UVa 1664 Conquer a New Region(并查集)
https://vjudge.net/problem/UVA-1664 题意: n个城市形成一棵树,每条边有权值C(i,j).任意两个点的容量S(i,j)定义为i与j唯一通路上容量的最小值.找一个点, ...
- hdu 1163 九余数定理
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- 【Mysql】修改mysql的字符集和默认存储引擎,解决数据入库乱码问题
背景 在使用Python + Testlink做自动化的过程中,遇到了数据入库出现乱码的情况,后来通过修改字符集的方式解决了这个问题.下面的内容主要来自于一篇相关博文,博主做了细微的调整, 原文链接: ...
- 使用git bush 生成github SSH公钥
1 如果没有安装ssh,那么使用下面的指令 sudo apt-get install ssh 2 检查SSH公钥 cd ~/.ssh 看看存不存在.ssh,如果存在的话,掠过下一步:不存在的请看下一步 ...
- Angular2 表单验证相关
angular4响应式表单与校验http://blog.csdn.net/xiagh/article/details/78360845?locationNum=10&fps=1 How to ...
- 网络安全:攻击和防御练习(全战课), DDos压力测试
XSS 跨站脚本攻击: Cross-site scripting(简称xss)跨站脚本. 一种网站的安全漏洞的攻击,代码注入攻击的一种.XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法 ...
- HIVE之常用字符串函数
可以参考: 博文 : https://www.iteblog.com/archives/1639.html
- 管道 && 消息队列 && 共享内存
http://blog.csdn.net/piaoairy219/article/details/17333691 1. 管道 管道的优点是不需要加锁. 缺点是默认缓冲区太小,只有4K. 一个管道只适 ...
- 快速切题 poj 2996 Help Me with the Game 棋盘 模拟 暴力 难度:0
Help Me with the Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3510 Accepted: ...
- python自动化运维之路2
list列表 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 #!/usr/bin/env python # _*_ encoding:utf-8 _*_ # a ...