Java-11.4

DAY.12

一 选择排序

 数组的 0 索引一次和后面的索引进行比较,元素小的放前,依次比较。

二 二分查找(针对有序数组)

 1.定义最大最小索引

 2.计算中间索引

 3.中间索引与对应元素比较

 4.重新获取最大 最小索引

 5.返回

package org.lemon.array2分法;

public class ArrayDemo {
   public static void main(String[] args) {
	 //定义数组  静态初始化
	   int [] array = {22,33,44,55,66,77,88};
	 //查询45 元素对应的索引
	   int index = getIndex(array,55);
	   System.out.println("index:"+index);
	 //查询345 元素对应索引
	   int index2 = getIndex(array,555);
	   System.out.println("index2:"+index2);
}
   public static int getIndex(int [] array,int value) {
	   //定义最大索引
	    int max = array.length-1;
	    int min = 0;
	    //中间索引
	    int mid = (max+min)/2;
	    
	    while(array[mid] !=value){
			//当前mid索引对应的元素不等于value元素,分两种情况
			if(array[mid]>value){
				//重获最大索引
				 max = mid -1 ;
			}else if(array[mid]<value){
				min = mid +1 ;
			}
			//找不到返回-1
			if(min>max){
				return -1 ;
			}
			//重新获取最大和最小索引,计算中间索引
			mid = (max+min)/2 ;
			}
	    		//相等,直接返回
		    return mid ; 
	}
}
三  Arrays类
           包含用来操作数组(排序,搜索)的各种方法 <针对数组操作的工具类>

      常用方法:

           1. public static String toString(int[] a):将任意类型的数组以字符串形式显示出来!
     2. public static void sort(int[] a):快速排序:(将给定数组中元素升序排序)
      3.public static int binarySearch(int[] a, int key):当前int数组一定是有序数组使用二分搜索法来搜索指定的 int 型数组,以获得指定的值

package org.lemon.Arrays;

import java.util.Arrays;

public class ArraysDemo {
  public static void main(String[] args) {
	//定义数组
	  int [] array = {23,35,52,44,88,17};
	  
	//转换为String类型    方法:toString()
	  System.out.println("toString() :"+Arrays.toString(array));
	  
	  
	//快速排序  以字符串显示
	 Arrays.sort(array);
	 System.out.println(Arrays.toString(array));
	//二分搜索法    eg: 88
	 int index = Arrays.binarySearch(array, 88);
	 System.out.println("index:"+index);
	 
}
}

四  BigDecimal (提供浮点类型数据的精确计算)

     构造方式:     public BigDecimal(String val)

    常用的成员方法;
   1.public BigDecimal add(BigDecimal augend):加
    2.public BigDecimal subtract(BigDecimal subtrahend):减
    3.public BigDecimal multiply(BigDecimal multiplicand):乘法
    4.public BigDecimal divide(BigDecimal divisor):除
    5.public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
   divisor:商, scale:保留几位小数    roundingMode:舍入的一种模式:ROUND_HALF_UP

      

package org.lemon.BigDecimal;

public class BigDecimalDemo {
	public static void main(String[] args) {
		System.out.println(1.28+0.22);
		System.out.println(1.0-0.44);
		System.out.println(1.305*100);
		System.out.println(4.567/100);
	}
	
}

package org.lemon.BigDecimal;

import java.math.BigDecimal;

public class BigDecimalDemo2 {
  public static void main(String[] args) {
	 //创建BigDecimal对象
	  BigDecimal bd1 = new BigDecimal("0.9");
	  BigDecimal bd2 = new BigDecimal("0.1");
	  System.out.println("add:"+bd1.add(bd2));//加
	  
	  System.out.println("sub:"+bd1.subtract(bd2));//减
	  
	  System.out.println("mul:"+bd1.multiply(bd2));//乘
	  
	  System.out.println("div:"+bd1.divide(bd2));//除
	  
	  System.out.println("div:"+bd1.divide(bd2,5, BigDecimal.ROUND_HALF_UP));//商 保留数 舍入模式
}
}

五 BigInteger(用来计算超出了Integer类型范围的数据)

           构造方法:public BigInteger(String val)将字符串表示的数字封装成BigInteger类型
      成员方法:
   1.public BigInteger add(BigInteger val)
   2.public BigInteger subtract(BigInteger val)
   3.public BigInteger multiply(BigInteger val)
   4.public BigInteger divide(BigInteger val)
   5.public BigInteger[] divideAndRemainder(BigInteger val)  返回一个BigInteger数组,数组中的元素:商,余数


package org.lemon.BigInteger;

import java.math.BigInteger;

public class BigIntegerDemo {
   public static void main(String[] args) {
	  //获取Integer 最大值
	   System.out.println(Integer.MAX_VALUE);
	   
	   //创建BigInteger对象
	   BigInteger i = new BigInteger("463824783278578") ;
	   System.out.println("i:"+i);
	   
	   BigInteger b1 = new BigInteger("24");
	   BigInteger b2 = new BigInteger("12");
	BigInteger[] datas = b1.divideAndRemainder(b2) ;
		System.out.println("datas[0]:"+datas[0]);
		System.out.println("datas[1]:"+datas[1]);   
		
}
}

六 Calendar日历类

    为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法并为操作日历字段(例如获得下星期的日期)提供了一些方法
   Calendar该类是一个抽象类:(不能实例化)----------》创建对象
   public static Calendar getInstance()
   public int get(int field)返回给定日历字段的值
  
   public static final int YEAR:表示日历中 的年
   public static final int MONTH:月份:是0开始计算的
  public static final int DATE:和DAY_OF_MONTH是同义词,表示月份中的某天  


               Calendar  calendar  =   Calendar.getInstance();

                

    成员方法:
   1.public abstract void add(int field,int amount)        为给定的日历的字段添加或者减去时间偏移量
   2.public final void set(int year,int month,int date)    设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值  e.g.: calendar.set(2017.10.1);

package org.lemon.Calendar;

import java.util.Calendar;

public class CalendarDemo {
  public static void main(String[] args) {
	//创建Calendar对象
	  Calendar calendar = Calendar.getInstance();
	  //获取年
	  int year = calendar.get(Calendar.YEAR);
	  //获取月
	  int month = calendar.get(Calendar.MONTH);//月从 0 开始计算
	  //获取天
	  int date = calendar.get(Calendar.DATE);
	  
	  System.out.println(year+"年"+(month+1)+"月"+date+"日");
}
}

package org.lemon.Calendar;

import java.util.Calendar;

public class CalendarDemo2 {
  public static void main(String[] args) {
	 //创建 Calendar对象
	  Calendar calendar = Calendar.getInstance();
	  //年
	  int year = calendar.get(Calendar.YEAR);
	  //月
	  int month = calendar.get(Calendar.MONTH);
	  //日
	  int date = calendar.get(Calendar.DATE);
	  System.out.println(year+"年"+(month+1)+"月"+date+"日");
	  
	  // 5年前的今天
	  calendar.add(Calendar.YEAR,-5);
	  //新年
	  int year1 = calendar.get(Calendar.YEAR);
	  //新月
	  int month1 = calendar.get(Calendar.MONTH);
	  //新日
	  int date1 = calendar.get(Calendar.DATE);
	  System.out.println(year1+"年"+(month+1)+"月"+date1+"日");
	  
	  //设置日历字段
	  calendar.set(1999,1,1);
	  //年
	  int year3 = calendar.get(Calendar.YEAR);
	  //月
	  int month3 = calendar.get(Calendar.MONTH);
	  //日
	  int date3 = calendar.get(Calendar.DATE);
	  //输出
	  System.out.println(year3+"年"+(month3)+"月"+date3+"日");
	  }
}


package org.lemon.Calendar;

import java.util.Calendar;
import java.util.Scanner;

//键盘录入年份,判断2月有多少天
public class CalendarDemo3 {
  public static void main(String[] args) {
	//创建键盘录入对象
	   Scanner sc = new Scanner(System.in);
	   System.out.println("输入年份");
	   int year = sc.nextInt();
	   //创建Calendar对象
	   Calendar calendar = Calendar.getInstance();
	   //设置时间
	   calendar.set(year, 2, 1);
	   //改变时间
	   calendar.add(Calendar.DATE,-1);
	   System.out.println("你输入的年份二月有:"+calendar.get(Calendar.DATE)+"天");
	   
}
}

七 Date 日期类

    表示特定的瞬间,精确到毫秒。
  
       构造方式:
   1.public Date():     表示分配的一个Date对象:无参: 通过无参构造获取当前系统的具体的时间
   2.public Date(long date):   指定一个时间毫秒值  

            成员方法:
   1.public long getTime():    获取当前时间毫秒值如果知道Date对象,可以通过getTime()获取时间毫秒值
                2.public void setTime(long time)


package org.lemon.Date;

import java.util.Date;

public class DateDemo {
  public static void main(String[] args) {
	//创建date对象
	  Date d = new Date();
	  System.out.println("d:"+d);
	  //设置时间
	  long time = 1000/60/60;
	  Date d2 = new Date(time);
	  System.out.println("d2:"+d2);
	  
	  
}
}


package org.lemon.Date;

import java.util.Date;

public class DateDemo2 {
   public static void main(String[] args) {
	 //创建
	   Date d = new Date();
	   System.out.println(d);
	   
	   long time=d.getTime();
	   System.out.println(time);
	   
	   //System获取当前时间毫秒数
	   System.out.println(System.currentTimeMillis());
	   
	   d.setTime(1000) ;
	   System.out.println(d);
	   
}
}


package org.lemon.Date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo3 {
  public static void main(String[] args) throws ParseException {
	 //创建Date 对象
	  Date d = new Date();
	  //创建SimpleDateFormat对象 格式化Date
	  SimpleDateFormat sdf = new SimpleDateFormat("yyyy--MM--dd");
	  String dates = sdf.format(d);
	  System.out.println("dates:"+dates);
	  
	  // String------->Date
	  String s = "2017,11,07";
	  //一定要保证SimpleDateFormat中的String Pattern这个模式和当前给的字符串的文本格式的模式必须一致!
	  //创建SimpleDateFormat对象
	  SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy,MM,dd");
	  
	  Date d1 = sdf1.parse(s); // 解析    抛出异常
	  System.out.println("d1:"+d1);
	  
}
}
将Date对象--->String类型的日期的"文本格式":格式化
   public final String format(Date date)
  String类型日期的"文本格式"---->Date日期对象:解析
   public Date parse(String source) 该方法本身会抛出一个异常:ParseException(解析异常:编译时期异常)
  
  要进行转换:必须使用中间桥梁:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
   日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期Date -> 文本String)、解析(文本String-> 日期Date)和标准化
  
   但是,DateFormat是抽象类,不能直接实例化,使用的是它更具体的子类进行实例化:
   SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类
  
   常用的构造方法:
   Date---格式化--->String文本格式
  
   public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
  
   日期和时间模式
   y   年 比如:2017---->yyyy           M 年中的月份:2------>MM 02        d   月份中的天数 :----->dd
   H   小时    HH                         m 小时中的分钟数  mm                s 分钟中的秒数 ss
  

package org.lemon.Date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
private DateUtil(){
		
	}
//Date---->String
public static String dateToString(Date d,String format) {
	SimpleDateFormat sdf = new SimpleDateFormat(format) ;
	String s = sdf.format(d);
	 return s;
	 
	//一步走 return new SimpleDateFormat(format).format(d) ;
}
//String----->Date
public static Date stringToDate(String s,String format) throws ParseException {
	SimpleDateFormat sdf1 = new SimpleDateFormat(format) ;
	Date d1 = sdf1.parse(s);
	 return d1;
	//一步走 return new SimpleDateFormat(format).parse(s) ;
}
}
package org.lemon.Date;

import java.text.ParseException;
import java.util.Date;

public class DateUtilDemo1 {
		
	public static void main(String[] args) throws ParseException {
			
	//Date--->String
	//创建一个Date对象
	Date d = new Date();	
	String s = DateUtil.dateToString(d,"yyyy--HH--dd");
	System.out.println("s:"+s);
}
	
	//String--->Date
	String s1 = "2017--11--07";
	Date d1 = DateUtil.stringToDate(s1, "yyyy--HH--dd");
    System.out.println(d1);
}

package org.lemon.Date;
    import java.text.ParseException;
	import java.util.Date;
	import java.util.Scanner;

	public class DateUtilDemo2 {
       public static void main(String[] args) throws ParseException {
			
			//创建键盘录入对象
			Scanner sc = new Scanner(System.in) ;
			System.out.println("请输入你的出生年月日: ");
			String line = sc.nextLine() ;
			
			//使用DateUtil工具类
			Date d = DateUtil.stringToDate(line, "yyyy-MM-dd") ;
			//获取当前出生年日所在的时间毫秒值
			long oldTime = d.getTime() ;
			//获取当前系统时间的毫秒值
			long nowTime = System.currentTimeMillis() ;
			long time = nowTime - oldTime ;
			//换算 成天
			long day = time/1000/60/60/24 ;
			System.out.println("你已经活了"+day+"天了");
		}
}


八  Math   (提供了一些数学运算的方法)

   常用的成员方法:
   1.public static int abs(int a):绝对值
   2.public static double ceil(double a):向上取整
   3.public static double floor(double a):向下取整
   4.public static double max(double a,double b):获取最大值
   5.public static double min(double a,double b):获取最小值
   6.public static double pow(double a,double b):a的b次幂
   7.public static double random():取值范围:[0.0,1.0)
   8.public static long round(double a):四舍五入
   9.public static double sqrt(double a):一个数的正平方跟


九  System类   (没有构造方法,所以字段和成员方法都用静态修饰)

                  成员方法:
   1.public static void gc()运行垃圾回收器。 
                       调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存,最终调用的就是重写之后finalize()回收不用的对象!

                                2.public static void exit(int status)  终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
3.public static long currentTimeMillis():返回当前的时间毫秒值

                                4.public static void arraycopy(Object src,int srcPos,Object dest, int destPos,int length)
                              指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束


package org.lemon.System;

import java.util.Scanner;

public class SystemDemo {
  public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	System.out.println("快输入");
	String s = sc.nextLine();
	System.out.println("s:"+s);
	
	Student s1 = new Student("我爱你",1000);
	System.out.println("s1:"+s1);
	
	//这时 出现gc()
	s1 = null;//当前Student变成空了,没有更多的引用
	System.gc();
}
}

package org.lemon.System;

public class Student {
	//成员变量
		private String name;
		private int age ;
		public Student() {
			super();
		}
		public Student(String name, int age) {
			super();
			this.name = name;
			this.age = age;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		@Override
		public String toString() {
			return "Person [name=" + name + ", age=" + age + "]";
		}
		
		//重写Object中的finalize()方法
		@Override
		protected void finalize() throws Throwable {
			System.out.println("当前垃圾回收器需要回收不用对象了"+this);
			super.finalize();	
		}
}



package org.lemon.System;

import java.util.Arrays;

public class SystemDemo2 {
  public static void main(String[] args) {
	//2个数组
	  int [] array1 = {1,2,3,4,5,6};
	  int [] array2 = {11,22,33,44,55,66};
	  //复制
	  System.arraycopy(array1, 1, array2, 1, 2);
	  System.out.println("array1:"+Arrays.toString(array1));
	  System.out.println("array2:"+Arrays.toString(array2));
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值