JAVA常用类
Java比较器
Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题
- 正常java对象只能进行
==
和!=
的比较,如何实现比较对象的大小?使用两个接口中的任何一个Comparable
和Comparator
Comparable
接口
String
、包装类实现了Comparable
接口,重写了compareTo()
方法,给出了比较两个对象大小的方法- 重写
compareTo(obj)
的规则:如果当前对象this大于形参对象obj则返回正整数,小于则返回负整数,相等返回0 - 对于自定义类,如果需要排序,可以让自定义类实现``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.sort
或Arrays.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类
-
构造器是私有的,无法创建该类对象,内部方法都是静态的,很方便进行调用
-
三个成员变量:
err
、in
、out
分别代表标准错误输出流(显示器)、标准输入流(键盘输入)和标准输出流(显示器) -
成员方法
-
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)
:根据字符串构建对象
-
对数字精度要求比较高,
Float
和Double
不行,则用BigDecimal