Java基础学习笔记《六》

一:数组

     声明格式:数据类型[]  数组名=new 数据类型[数组长度(元素个数)];

    数组的遍历

int[] arr=new int[10];
//遍历方式一
for(int i=0;i<arr.length;i++){
     //todo
}
//遍历方式二
for(int i:arr){
   //todo
}

二、Scanner类(java.util.Scanner)

       Scanner sc =new Scanner(System.in);

       nextInt():获取输入的整数

       nextLine():获取输入的字符串

注意事项:a、获取两个int类型    正常获取

                  b、获取两个字符串类型    正常获取

                  c、先获取一个字符串类型,后获取一个int类型   正常获取

                  d、先获取一个int类型,后获取一个字符串类型  获取不到字符串,因为有默认的回车换行,所以获取字符串时,获取的是回车换行;

针对第四种情况,具体的解决方法有两种:

                 a、重新创建Scanner对象 

                 b、都用字符串nextLine接收,然后把相应的字符串转换成int类型

Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String s2=sc.nextLine();
int x=Integer.paseInt(s);//或用Integer.valueOf(s),返回的是Integer类型

三、常见的几种排序算法

package com.common.utils;

import java.util.Comparator;

public class CommonUtils {
	
	public static int getMax(int num1,int num2)
	{
		int result=(num1>=num2)?num1:num2;
		return result;
	}
	/**
	 * 二分查找是否存在
	 * @param leftIndex 开始下标
	 * @param rightIndex 结束下标
	 * @param searchVal  查询的值
	 * @param arr  查找的数组源
	 * @return 返回超找的索引下标  -1 未找到
	 */
	public static<T extends Number> int binarySearch(int leftIndex,int rightIndex,T searchVal,T[] arr,Comparator<T> comparator)
	{
		//排序
		quickSort(0, arr.length-1, arr,comparator);
		int midIndex=(leftIndex+rightIndex)/2;
		T midVal=arr[midIndex];
		if(rightIndex>=leftIndex) {
			if(comparator.compare(midVal, searchVal)>0)
				binarySearch(leftIndex, midIndex-1, searchVal, arr,comparator);
			else if(comparator.compare(midVal, searchVal)<0)
				binarySearch(midIndex+1, rightIndex, searchVal, arr,comparator);
			else if(comparator.compare(midVal, searchVal)==0)
				return midIndex;
		}
		return -1;
	}
	/**
	 * 泛型快速排序
	 * @param arr
	 * @param left 开始下标
	 * @param right 结束下标
	 * @param comparator 比较器
	 */
	public static<T> void quickSort(int left,int right,T arr[],Comparator<T>comparator)
	{
		int l=left;
		int r=right;
		T pivot=arr[(left+right)/2];
		T temp;
		
		while(l<r) {
			while(comparator.compare(arr[l],pivot)<0) l++;
			while(comparator.compare(arr[r],pivot)>0) r--;
			
			if(l>=r) break;
			temp=arr[l];
			arr[l]=arr[r];
			arr[r]=temp;
			
			if(arr[l]==pivot) --r;
			if(arr[r]==pivot) ++l;
		}
			if(l==r)
			{
				l++;
				r--;
			}
			if(left<r) quickSort(left,r,arr,comparator);
			if(right>l) quickSort(l, right, arr,comparator);
		
	}
	/**
	 * 插入排序
	 * @param arr
	 */
	public static<T> void insertSort(T arr[],Comparator<T> comparator)
	{
		for(int i=1;i<arr.length;i++)
		{
			T insertVal=arr[i];
			//insertVal准备和前一个数比较
			int index=i-1;
			while(index>=0&& comparator.compare(insertVal,arr[index])<0 ) {
				//将把arr[index]向后移动
				arr[index+1]=arr[index];
				index--;
			}
			//将insertVal插入适当位置
			arr[index+1]=insertVal;
		}
	}
	/**
	 * 选择排序
	 * @param arr
	 */
	public static<T> void selectSort(T arr[],Comparator<T> comparator) {

		T temp;
		for(int i=0;i<arr.length-1;i++)
		{
			T min=arr[i];
			//记录最小数的下标
			int minIndex=i;
			for(int j=i+1;j<arr.length;j++)
			{
				if(comparator.compare(min, arr[j])>0)
				{
					min=arr[j];
					minIndex=j;
				}					
			}
			
			temp=arr[i];
			arr[i]=arr[minIndex];
			arr[minIndex]=temp;
		}
	}
	/**
	 * 冒泡排序
	 * @param arr
	 */
    public static<T> void bubbleSort(T[] arr,Comparator<T> comparator) {
    	for(int i=0;i<arr.length-1;i++){
    		for(int j=0;j<arr.length-1-i;j++){
    			if(comparator.compare(arr[j], arr[j+1])>0) {
    			T temp=arr[j];
    			arr[j]=arr[j+1];
    			arr[j+1]=temp;
    			}
    		}
    	}
    }
}

      测试类:

package com.common.utils;

import java.util.Calendar;
import java.util.Comparator;

public class JavaTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//int x=CommonUtils.getMax(1, 2);
        //System.out.println(x);
          Integer arr[]={1,3,2,4,7,5,6,8,10,9};//new int [100000];//
		/*
		 * for(int i=0;i<100000;i++) { //让程序随机产生一个1-10000的随机数 //math.random
		 * 会随机产生一个[0-1)的数 int t=(int)(Math.random()*100000); arr[i]=t; }
		 */
          Comparator<Integer> comparator=new Comparator<Integer>() {
			
			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				return o1 < o2 ?- 1 : (o1 == o2 ? 0 :1);
			}
		};
        Calendar cal=Calendar.getInstance();
        System.out.println("排序前:"+cal.getTime());
		//排序
        int isflag=CommonUtils.binarySearch(0, arr.length-1, 6, arr, comparator);
        System.out.println(isflag);
        /*
       CommonUtils.bubbleSort(arr,new Comparator<Integer>() {
           

   			@Override
   			public int compare(Integer o1, Integer o2) {
   				// TODO Auto-generated method stub
   				return o1 < o2 ?- 1 : (o1 == o2 ? 0 :1);
   			}
   		});
   		*/
        /*
         CommonUtils.selectSort(arr,new Comparator<Integer>() {
        

			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				return o1 < o2 ?- 1 : (o1 == o2 ? 0 :1);
			}
		});
		 */
       /*
       CommonUtils.insertSort(arr,new Comparator<Integer>() {

		@Override
		public int compare(Integer o1, Integer o2) {
			// TODO Auto-generated method stub
			return o1 < o2 ?- 1 : (o1 == o2 ? 0 :1);
		}
	});
	*/
        /*
        CommonUtils.quickSort(0, arr.length-1, arr,new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				return o1 < o2 ?- 1 : (o1 == o2 ? 0 :1);
			}
		});
		*/
        cal=Calendar.getInstance();
        System.out.println("排序后:"+cal.getTime());
        for(int a:arr)
          System.out.println(a);
	}

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值