单例模式
class Main{
private Main(){}
static private Main main;
static public Main getMain(){
if (main==null){
main=new Main();
}
return main;
}
}
class Customer{//测试
public static void main(String[] args) {
Main main = Main.getMain();
Main main1 = Main.getMain();
System.out.println(main);
System.out.println(main1);
}
}
排序算法
自带
首先java有自带的函数对int型的数组进行排序
import java.util.Arrays;
class Main{
static int[] a={3,5,8,7,4,2,9,1};
public static void main(String[] args) {
Arrays.sort(a);
for (int f:a){
System.out.println(f);
}
}
}
当然面试的时候肯定不能用自带的排序算法
冒泡排序
import java.util.Arrays;
class Main{
//从前向后进行扫描
public static void maopao1(){
int j;//j在这里可以省性能,不必每次都去初始化
int[] a={3,5,8,7,4,2,9,1};
for (int i2=0;i2<a.length;i2++){
for (int i=0;i<a.length-1-i2;i++){
if (a[i]>a[i+1]){
//交换俩个元素
j=a[i];
a[i]=a[i+1];
a[i+1]=j;
}
}
}
System.out.println(Arrays.toString(a));
}
public static void main(String[] args) {
maopao1();
}
}
选择排序
import java.util.Arrays;
class Main{
public static void main(String[] args) {
int[] a={3,5,8,7,4,2,9,1};
for (int start=0;start<a.length;start++){
int minData;
int minIndex=start;
for (int i=start;i<a.length;i++){//从i开始,防止每次都从第一个元组开始比对
if (a[i]<a[minIndex]){
minIndex=i;//记录下最小数字的角标
}
}
minData=a[minIndex];//记录下最小的数字
a[minIndex]=a[start];//和当前的记录进行交互
a[start]=minData;
}
System.out.println(Arrays.toString(a));
}
}
实现二分查找法
import java.util.Arrays;
class Main{
public static int seach(int []nums,int target){
int minIndex=0;//
int maxIndex=nums.length-1;
if (nums[minIndex]>target||nums[maxIndex]<target){
System.out.println("不在数组中");
return -1;
}
//这里写<=的意义是当minIndex>maxIndex的时候就说明数据不在范围内
while (minIndex<=maxIndex){
//查看当前查找的范围区间
System.out.println("min=:"+minIndex+",max:="+maxIndex);
int z=(minIndex+maxIndex)/2;
if (nums[z]==target){
return z;//如果相等返回
}else if(nums[z]>target) {
maxIndex=z-1;
}else if(nums[z]<target){
minIndex=z+1;
}
}
System.out.println("不在数组中2");
return -1;
}
public static void main(String[] args) {
int []a={1,2,3,4,6,7,8,9,10};
int seach = seach(a,1);
System.out.println(seach);
}
}