java的基础学习(2)
抽象类:
抽象类不能被实力化。抽象类不一定要包含abstract方法,也可以有实现方法。但是一旦含有abstract方法,这个类声明必须为abstract。抽象类不能有主体,即实现过程。
接口:
是特殊的抽象类,接口不能被实例化,接口中所有方法都不能有主体。一个类可以实现多个接口。由于接口中的变量本质上是static和final的,做全局变量,定义时需赋初值,不能用protected和private修饰,访问方式:接口名.变量名。接口不能继承其他类,但可以继承其他接口。
Final的注意事项:
Final修饰的变量又称为常量,定义的时候必须赋值,且之后不能再赋值
Final什么时候用:
出于安全考虑,类的某个方法不允许修改;最为最终类,不能再被继承;父类的某个方法不希望被子类覆盖时,需要加上final修饰;某些变量值是固定的,不允许被修改时,如圆周率。
一维数组的定义:
数据类型 数组名[]=new 数据类型[数量];
如:int a[]=new int[5];
排序算法:
/*
* 作者:
* 时间:2016.7
* 功能:冒泡排序,快速排序,插入排序,选择排序
*
*/
package com.xiaoming;
import java.util.*;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//int arr[]={1,6,0,-9,-1};
int len=10;
int[] arr1=new int[len];
for(int i=0;i<len;i++)
{
//随机产生1-1000之间的数
int t=(int)(Math.random()*1000);
arr1[i]=t;
}
//创建Bubble类
System.out.println("冒泡排序");
Bubble bubble=new Bubble();
bubble.sort(arr1);
//输出最后结果
for(int i=0;i<arr1.length;i++)
{
System.out.print(arr1[i]+" ");
}
//插入排序
System.out.println("插入排序");
InsertSort ins=new InsertSort();
ins.sort(arr1);
//输出最后结果
for(int i=0;i<arr1.length;i++)
{
System.out.print(arr1[i]+" ");
}
//快速排序
System.out.println("快速排序");
QuickSort qs=new QuickSort();
qs.sort(0, arr1.length, arr1);
//输出最后结果
for(int i=0;i<arr1.length;i++)
{
System.out.print(arr1[i]+" ");
}
///选择排序
System.out.println("选择排序");
Select select=new Select();
select.sort(arr1);
//输出最后结果
for(int i=0;i<arr1.length;i++)
{
System.out.print(arr1[i]+" ");
}
//打印系统时间
/*Calendar cal=Calendar.getInstance();
System.out.println("排序前:"+cal.getTime());
select.sort(arr1);
//重新获得时间,因为是单态模式
cal=Calendar.getInstance();
System.out.println("排序后:"+cal.getTime());
*/
}
}
//冒泡排序
class Bubble
{
public void sort(int arr[])
{
//冒泡排序
int temp=0;
//外部循环,决定走几趟
for(int i=0;i<arr.length-1;i++)
{
//内部循环,比较大小,交换
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}
//选择排序
class Select
{
public void sort(int arr[])
{
int temp=0;
for(int i=0;i<arr.length;i++)
{
//认为第一个数最小,每轮找出最小的一个数排在前面
int min=arr[i];
int minIndex=i;
for(int j=i+1;j<arr.length-1;j++)
{
if(min>arr[j])
{
min=arr[j];
minIndex=j;
}
}
//当退出for循环就找到最小值
temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
}
//插入排序
class InsertSort
{
public void sort(int arr[])
{
for(int i=1;i<arr.length;i++)
{
int insertVal=arr[i];
//insertVal准备和前一个数比较
int index=i-1;
while(index>=0&&insertVal<arr[index])
{
//把arr[Index]向后移动
arr[index+1]=arr[index];
//index向前移动
index--;
}
//将insertVal插入到适当位置
arr[index+1]=insertVal;
}
}
}
//快速排序
class QuickSort
{
public void sort(int left,int right,int array[])
{
int l=left;
int r=right;
int pivot=array[(left+right)/2];
int temp=0;
while(l<r)
{
while(array[l]<pivot) l++;
while(array[r]>pivot) r--;
if(l>=r) break;
temp=array[r];
array[r]=array[l];
array[l]=temp;
if(array[l]==pivot) --r;
if(array[r]==pivot) ++l;
}
//System.out.println("the current array is: ");
if(l==r)
{
l++;
r--;
}
if(left<r) sort(left,r,array);
if(right>l) sort(l,right,array);
}
}