public static void main(String[] args) {
/**
* 用于实现冒泡排序
* N个数字两两比较较小的放在前面,最后会将最大的数字放到末尾。
* N-1次循环每次都将把数组中的最大值找出
*
* 时间复杂度为:O(n*2)
* 升序
*/
int[] array = {25,7,14,4,8,1,24,5,9,2,22};
for(int i = 0;i<array.length - 1;i++){
// 循环N-1次
for(int j = 0;j < array.length - 1 - i;j++){
if(array[j] > array[j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for (int item: array) {
System.out.println(item);
}
}
public static void main(String[] args) {
/**
* 用于实现比较排序
* 每次循环都会将最小的一个放在前面,和冒泡不同的是不会进行相邻的两两比较,比较的对象都是要确定数字的那个位置。
* Math.random() 返回【0-1)的浮点数
* 时间复杂度O(n*2)
*/
int[] array = new int[20];
for(int i = 0;i < 20;i++){
array[i] = (int)(Math.random()*100 + 1);
System.out.print(array[i] + "");
if(i%5 == 4){
System.out.println();
}
}
for (int i = 0;i < array.length - 1;i++){
// 循环N-1次,说明最后剩一个不用再比较了。i还表示要将哪一个索引下的值替换掉
for (int j = i + 1;j < array.length;j++){
if(array[j] < array[i]){
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
for (int item:array) {
System.out.print(item + " ");
}
}
public static void main(String[] args) {
/**
* 插入排序
* 准备两个数组一个存放已经排好序的数据,一个存放要插入的数据(用一个数组也可以实现)
* 从要插入数组中取出一个值,和已经排序好的数据从小到大一一比较,如果比原来的小,就插入原来的位置,将原来的数据和
* 他后面的数据整体后移一位
*
* 时间复杂度O(n*2)
*/
// 原数组
int[] array = new int[20];
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 100 + 1);
System.out.print(array[i] + " ");
}
for (int i = 1; i < array.length; i++) {
for (int j = 0; j < i; j++) {
if(array[i] <array[j]){
int tmp = array[j];
array[j] = array[i];
array[i] = tmp;
}
}
}
for (int item:array) {
System.out.print(item + " ");
}
}
使用位运算完成
左移<< 右移>> 按位与& 按位或| 按位异或^ 按位非~
8 二进制1000 右移两位10 8>>2=2
try{
// 可能出现异常的语句
}catch(Exception e){
// 捕获异常并进行相应的操作
}finally{
// 无论如何最后都要执行的语句,处理System.exit(0)
}
创建(new)–>就绪(runnable)–>运行(running)–>阻塞(blocked)–>等待(waiting)–>消亡(dead)
产生死锁的四个条件
package com.singleton;
/**
* 单例:通过特殊的编码格式,
* 保证该类的实例在一次程序运行过程中只有一个
* 懒汉式
*/
public class Lazy {
// 声明私有的静态属性,类型为本类类型
private static Lazy lazy;
private Lazy(){}
// 声明一个公共的取类实例静态方法,并实现同步.同一时刻只能有一个线程访问该方法
public synchronized static Lazy getInstance(){
if(lazy == null){
lazy = new Lazy();
}
return lazy;
}
}
package com.singleton;
/**
* 饿汉
*/
public class Hungry {
private static Hungry hungry = new Hungry();
private Hungry(){}
public synchronized static Hungry getInstance() {
return hungry;
}
}
package com.singleton;
public class DoubleLock {
/**
* 单例双重锁
*/
// 隐藏默认构造函数,通过隐藏构造函数可以使得无法通过构造函数来获取对象
private DoubleLock(){}
private volatile static DoubleLock doubleLock;
public static DoubleLock getInstance(){
if(doubleLock == null){
synchronized (DoubleLock.class){
doubleLock = new DoubleLock();
}
}
return doubleLock;
}
}
int a = 0;
for(int i = 0; i < 6; i++){
//实际:1
a = a++;
//运算:0
System.out.print(a);
}
输出的是6个0,因为每一次参与运算的a都是0
&不会短路,而&&会短路。如果是A && B,那么如果A=false,那么结果为false并且B不会执行。
如果是A & B,若A=false,则结果为false,但是B还是会被执行。
int a1 = 7,
a2 = 7,
b1 = 8,
b2 = 8;
boolean flag1 = a1++ > b1-- & a1++ > b1++;
boolean flag2 = a2++ > b2-- && a2++ > b2++;
a1, b1, a2, b2和flag1和flag2的值
结果是:a1=9,b1=8,flag1=false
a2=8,b2=7,flag1=false
application programing interface
abstract assert boolean break byte case
catch char class continue default do
double else enum extends final finally
float for if implements import int
interface instanceof long native new package
private protected public return short static
strictfp super switch synchronized this throw
throws transient try void volatile while
goto const