JAVA常用类之比较器、System、BigInteger

JAVA常用类

Java比较器

Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题

  • 正常java对象只能进行==!=的比较,如何实现比较对象的大小?使用两个接口中的任何一个ComparableComparator

Comparable接口

  1. String、包装类实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方法
  2. 重写compareTo(obj)的规则:如果当前对象this大于形参对象obj则返回正整数,小于则返回负整数,相等返回0
  3. 对于自定义类,如果需要排序,可以让自定义类实现``Comparable,重写compareTo()`方法
public class Goods implements Comparable{
    private String _name;
    private int _price;

    @Override
    public int compareTo(Object o) {
        if(o instanceof Goods)
        {
            Goods goods = (Goods) o;
            return Double.compare(_price, goods._price);
        }
        throw new RuntimeException("传入的数据类型不一致");
    }
    
    public Goods(String name, int price) {
        _name = name;
        _price = price;
    }
    @Override
    public String toString() {
        return "Goods{" +
                "_name='" + _name + '\'' +
                ", _price=" + _price +
                '}';
    }
}

public class CompareTest {
    public static void main(String[] args) {
        Goods[] goods= new Goods[4];
        goods[0] = new Goods("g1",10);
        goods[1] = new Goods("g2",45);
        goods[2] = new Goods("g3",3);
        goods[3] = new Goods("g4",67);

        Arrays.sort(goods);
        System.out.println(Arrays.toString(goods));
 //[Goods{_name='g3', _price=3}, Goods{_name='g1', _price=10}, Goods{_name='g2', _price=45}, Goods{_name='g4', _price=67}]
    }
}

定制排序java.util.Comparator

  • 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或实现了java.lang.Comparable接口的排序规则不适合当前的操作,则可以考虑使用Comparator来排序
  • 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果返回正整数,则o1>o2
  • 可以将Comparator传递给sort方法(如Collections.sortArrays.sort),从而允许在排序顺序上实现精确控制
  • 还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序
public class CompareTest {
    @Test
    public void test1()
    {
        String[] str = {"AA","ZZ","BB","II","CC","GG","UU","QQ"};

        // 定制排序:按照从大到小的顺序排列
        Arrays.sort(str, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof String && o2 instanceof String)
                {
                    String s1 = (String) o1;
                    String s2 = (String) o2;

                    return -s1.compareTo(s2);
                }
                throw new RuntimeException("输入数据类型不是String");

            }
        });
        System.out.println(Arrays.toString(str));
    }
}

System类

  • 构造器是私有的,无法创建该类对象,内部方法都是静态的,很方便进行调用

  • 三个成员变量:errinout分别代表标准错误输出流(显示器)、标准输入流(键盘输入)和标准输出流(显示器)

  • 成员方法

    • native long currentTimeMillis():时间戳

    • void exit(int status):退出程序,0代表正常退出,非0则是异常退出

    • void gc():请求系统进行垃圾回收,关于系统是否立即回收,则取决于系统中垃圾回收算法的实现以及系统执行的情况

    • String getProperty(String key):获得系统中属性名为Key的属性对应的值

在这里插入图片描述

BigInteger与BigDecimal

  • Integer作为int的包装类,能存储的最大整型值有限,Long类也有限

  • java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger提供所有Java的基本整数操作符的对应物,并提供Math类的所有相关方法

  • 构造器

    • BigInteger(Strin val):根据字符串构建对象
  • 对数字精度要求比较高,FloatDouble不行,则用BigDecimal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值