【知晓的丧day拯救计划】java基础学习笔记补充 一些常见类、接口

Comparable接口——实现对象排序

Arrays工具类提供了sort()方法对数组进行排序,但只能针对可以进行大小比较的数据类型,对对象则无法直接进行比较。

如果想对对象作比较,对象就需要实现Comparable接口,这个接口中只有一个方法compareTo(),这个方法中定义了对象比较的规则,我们可以重写这个方法来按照我们希望的顺序对对象进行排序,然后再调用sort()方法就是按照新规则排序了。

compareTo()方法的核心思想:
public int compareTo(Object obj)
在CompareTo方法中,将当前对象和obj对象进行比较,如果大于返回1,等于返回0,小于返回-1。

CompareTo方法的写法比较固定

@Override
public int compareTo(Person o) {
	//将传入对象强转为当前对象
	Person person = (Person)o;
	//按照希望的属性进行比较
	//如果需要降序排列将正负1对调即可
	if(this.age < person.age) {
		return -1;
		}
	if(this.age > person.age) {
		return 1;
	}
	return 0;
}

放在整体例子中理解
Person类有id,name,age,birth属性,希望按照age为Person数组排序

import java.util.Arrays;

public class Test3{
	public static void main(String[] args) {
		Person person1 = new Person(2002,"李四",30,"1990-5-20");
		Person person2 = new Person(2001,"张三",26,"1994-8-1");
		Person person3 = new Person(2003,"王麻子",36,"1984-1-13");
		
		Person[] persons = {person1,person2,person3};
		//原始顺序输出
		for(Person person:persons) {
			System.out.println(person.toString());
		}
		System.out.println();
		
		//排序后输出
		Arrays.sort(persons);
		for(Person person:persons) {
			System.out.println(person.toString());
		}		
	}	
}

class Person implements Comparable<Person>{
	private int id;
	private String name;
	private int age;
	private String birth;
	
	public Person() {}
	
	public Person(int id, String name, int age, String birth) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.birth = birth;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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;
	}
	public String getBirth() {
		return birth;
	}
	public void setBirth(String birth) {
		this.birth = birth;
	}
	
	@Override
	public String toString() {
		return getId() + "\t" + getName() + "\t" + getAge() + "\t" + getBirth();
	}

	@Override
	public int compareTo(Person o) {
		Person person = (Person)o;
		if(this.age < person.age) {
			return -1;
		}
		if(this.age > person.age) {
			return 1;
		}
		return 0;
	}	
}

Math类(java.lang.Math)

java.lang.Math类提供了一系列静态方法用于科学计算,其参数和返回值一般为double型。如果需要更加强大的数学运算能力,计算高等数学中相关内容,可以使用apache commons下的Math类库。

Math类常用方法

方法作用
abs绝对值
acos、asin、atan、cos、sin、tan三角函数
sqrt平方根
pow(double a, double b)a的b次幂
max(double a, double b)取大值
min(double a, double b)取小值
ceil(double a)大于a的最小整数
floor(double a)小于a的最大整数
random()返回0.0-1.0的随机数
long round(double a)四舍五入
toDegrees(double angrad)弧度–>角度
toRadians(double angdeg)角度–>弧度
Math.PI常量π
Math.E常量e
//取整相关
System.out.println(Math.ceil(3.2));   //4.0
System.out.println(Math.floor(3.2));  //3.0
System.out.println(Math.round(3.2));  //3
System.out.println(Math.round(3.8));  //4
		
System.out.println(Math.ceil(-3.2));  //-3.0
System.out.println(Math.floor(-3.2)); //-4.0
System.out.println(Math.round(-3.2)); //-3
System.out.println(Math.round(-3.8)); //-4
		
//绝对值、开方
System.out.println(Math.abs(-3.2));   //3.2
System.out.println(Math.sqrt(25));    //5.0
System.out.println(Math.pow(5, 2));   //25.0
		
//常用常量
System.out.println(Math.PI);          //3.141592653589793
System.out.println(Math.E);           //2.718281828459045
		
//随机数
System.out.println(Math.random());

Random类(java.util.Random)

Math.random()只能提供0-1之间的double类型数据,如果我们需要的随机数用Math.random()获取太过复杂,就可以使用Random类。Random类是专门用来生成随机数的,且Math.random()底层调用的就是Random类的nextDouble()方法。

Random random = new Random();
		
//随机生成[0,1)之间的double类型数据
System.out.println(random.nextDouble());
//随机生成int类型允许范围之内的整型数据
System.out.println(random.nextInt());
//随机生成[0,1)之间的float类型数据
System.out.println(random.nextFloat());
//随机生成true或false
System.out.println(random.nextBoolean());
//随机生成[0,10)之间的int类型数据
System.out.println(random.nextInt(10));
//随机生成[20,30)之间的int类型数据
System.out.println(20+random.nextInt(10));
//随机生成[20,30)之间的int类型数据(这就是使用Math.random的方法)
System.out.println(20+(int)(random.nextDouble()*10));

字符串相关类

String类、StringBuilder类、StringBuffer类是三个字符串相关类,String类对象是不可变字符序列,后两者是可变字符序列,StringBuilder效率高但线程不安全,StringBuffer效率低但线程安全。
【知晓的丧day拯救计划】java基础学习笔记补充 String相关类

时间处理相关类

计算机世界,把1970年1月1日00:00:00定位基准时间,以毫秒为单位进行度量,1970年之后用正数表示,1970年之前用负数表示,用long类型的值来表示。

可以用下面的代码获取当前操作系统时间的毫秒数

long now = System.currentTimeMillis();

这个毫秒数是所有时间类的核心值,年月日都是按照这个数值计算出来的。

【知晓的丧day拯救计划】java基础学习笔记补充 时间相关类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值