所谓工具类,就是该类中的方法都是被static修饰的,可以直接通过类名调用,这样的好处是不用去创建对象;在一定程度上简化了我们的使用.以下总结java中几个常见的工具类及其方法!!!
- public static void sort(数组)按照默认升序,对数组元素进行排序
int [] array1 = {
2,5,3};
arrays.sort(array1);//直接在原数组中排好序
注意:
- public static String toString(数组);默认格式:[元素1,元素2,……]
此方法可以把数组转换为字符串
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:
public static boolean equals(Object a, Object b)
:判断两个对象是否相等。我们可以查看一下源码,学习一下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。
默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行==
运算符的对象地址比较,只要不是同一个对象,结果必然为false。
对象内容比较
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:
public String toString()
:返回该对象的字符串表示。toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
}
// 省略构造器与Getter Setter
}
`public static long currentTimeMillis()`:返回以毫秒为单位的当前时间。
实际上,currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值,此方法可以用来计算某个程序所消耗的时间
验证for循环打印数字1-9999所需要使用的时间(毫秒)
public class SystemTest1 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("共耗时毫秒:" + (end - start));
}
}
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。参数序号 | 参数名称 | 参数类型 | 参数含义 |
---|---|---|---|
1 | src | Object | 源数组 |
2 | srcPos | int | 源数组索引起始位置 |
3 | dest | Object | 目标数组 |
4 | destPos | int | 目标数组索引起始位置 |
5 | length | int | 复制元素个数 |
将src数组中前3个元素,复制到dest数组的前3个位置上复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
import java.util.Arrays;
public class Demo11SystemArrayCopy {
public static void main(String[] args) {
int[] src = new int[]{
1,2,3,4,5};
int[] dest = new int[]{
6,7,8,9,10};
System.arraycopy( src, 0, dest, 0, 3);
/*代码运行后:两个数组中的元素发生了变化
src数组元素[1,2,3,4,5]
dest数组元素[1,2,3,9,10]
*/
}
}
Collections类是用来对集合进行操作的工具类,包括以下常见方法:
public static boolean addAll(Collection c, T... elements)
:往集合中添加一些元素。public static void shuffle(List> list) 打乱顺序
:打乱集合顺序。public static void sort(List list)
:将集合中元素按照默认规则排序。public static void sort(List list,Comparator super T> )
:将集合中元素按照指定规则public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
//原来写法
//list.add(12);
//list.add(14);
//list.add(15);
//list.add(1000);
//采用工具类 完成 往集合中添加元素
Collections.addAll(list, 5, 222, 1,2);
System.out.println(list);
//排序方法
Collections.sort(list);
System.out.println(list);
}
}
结果:
[5, 222, 1, 2]
[1, 2, 5, 222]
1.public static
这个方法按照默认规则进行排序,即升序
注意:使用这个方法的前提:
是被排序的集合中存储的元素必须实现comparable接口,重写compareTo方法
class Person implements Comparable<Person>{
private int age;
private String name;
.....
省略get/set方法
public int compareTo(Person o){
return this.getAge() - o.getAge();
//return o.getAge() - this.getAge();
//return 0;
}
}
Arraylist<Person> list = new ArrayList<>();
Collections.sort(list);
定义了一个person类,实现了comparable接口,并实现了compareTo()方法
排序规则:
public static void sort(List list,Comparator super T> )
class Person{
private int age;
private String name;
.....
省略get/set方法
}
Arraylist<Person> list = new ArrayList<>();
Collections.sort(list,new Comparator<Person>(){
public int compare(Person o1,Person o2){
return o1-o2;
}
//此外我们还可以拓展这个方法
//如果年龄一样就按照名字排序
/*public int compare(Person o1,Person o2){
int result = o1.getAge()-o2.getAge();
if(result == 0){
result = o1.getName() - o2.getName();
}
return result;
}
*/
});
排序规则:
o1 - o2 :代表升序
o2 - o1 :代表降序
Comparable接口位于 java.lang包下,Comparator接口位于java.util包下。
Comparable: 内部比较器,
一个类如果想要使用 Collections.sort(list) 方法进行排序,
则需要实现该接口
Comparator: 外部比较器
用于对那些没有实现Comparable接口
或者对已经实现的Comparable中的排序规则不满意进行排序.
无需改变类的结构,更加灵活。(策略模式)