java基础笔记07 - 常用类3 比较器,System,大数类
4.Java比较器
绝大部分的运算符都是给基本数据类型用的,除了对String重写的几个
而实际中,可能需要对俩对象做比较,排序,其实还是根据某一个属性比较
4.1 Comparable接口
自然排序
要比较的对象实现Comparable接口,里面重写compareTo()方法
public class CompareTest {
@Test
public void compareTest() {
Person[] ps=new Person[4];
ps[0]=new Person(3,"wang");
ps[1]=new Person(1,"zhao");
ps[2]=new Person(4,"sun");
ps[3]=new Person(1,"li");
Arrays.sort(ps); //其实是重写sort方法里面比较的步骤,只不过抽象出来了
System.out.println(Arrays.toString(ps));
}
}
class Person implements Comparable{
private int age;
private String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
//重写toString方法,方便打印数组
@Override
public String toString(){
return "Person{name='"+name+'\''+ ",age="+age+ '}';
}
//重写比较
@Override
public int compareTo(Object o) {
if(o instanceof Person){
Person p=(Person) o;
//方式一:
if(this.age>p.age){
return 1;
}else if(this.age==p.age) {
return this.name.compareTo(p.name);
}
return -1;
//方式2:
//return Integer.compare(this.age,p.age);
}
throw new RuntimeException("数据类型不一致");
}
}
4.2 Comparator接口
定制排序
场景:
元素的类就没有实现Comparable接口,或者实现了,但是排序规则不想用
从大到小看着不过瘾,还想按姓氏排序
重写compare(Object o1,Object o2)方法
//结构体同上
Arrays.sort(ps, new Comparator() {//这里用泛型了,下面就不用判断instanceof了
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Person && o2 instanceof Person){
return ((Person) o1).name.compareTo(((Person) o2).name);
}
throw new RuntimeException("数据类型不一致");
}
});
//用泛型的话
Arrays.sort(ps, new Comparator<Person>() {//这里用泛型了,下面就不用判断instanceof了
@Override
public int compare(Person p1, Person p2) {
if(p1 != null && p2 != null){
return p1.name.compareTo(p2.name);
}
throw new RuntimeException("数据类型不一致");
}
});
//用了lambda表达式
Arrays.sort(ps, (o1, o2) -> {
if (o1 != null && o2 != null) {
return (o1).name.compareTo((o2).name);
}
throw new RuntimeException("数据类型不一致");
});
5. System类
java.lang.System、
属于系统级别的功能方法,所以构造方法是private的,成员和方法都是static的
属性其实就仨,err,in,out 都是IO流的东西
方法:
currentTimeMillis();
exit(int status);
void gc();//请求垃圾回收,但是jvm不一定立即回收
String getProperty(String key);//获得系统的各种属性
//key包括:"java.version" "java.home" "os.name" "os.version" "user.name" "user.home" "user.dir"用户的当前工作目录
6.Math类
java.lang.Math
一系列的静态方法
7. BigInteger和BigDecimal
很少用到吧,但是面试会用呢
7.1 BigInteger
Integer最大2^32-1 Long 也是有限的
但是BigInteger 可以表示不可变的任意精度的整数
盲猜是个数组。。。
7.2 BigDecimal
防止double的精度不够,比如商业计算
BigDecimal对应的是浮点型,可以表示不可变得任意精度的有符号十进制定点数
盲猜是俩数组。。。
7.3方法
构造器,参数可以使String
还有加减乘除方法
本文来自博客园,作者:荧惑微光,转载请注明原文链接:https://www.cnblogs.com/yinghuoweiguang/p/15635519.html