Java常用类每日一考(Date、Compare相关)
2022.02.10Java常用类每日一考
1.将字符串”2017-08-16”转换为对应的java.sql.Date类的对象。
(使用JDK8之前或JDK8中的API皆可)
package www.fancy.prac1; import org.junit.Test; import java.text.ParseException; import java.text.SimpleDateFormat; public class dateTest { @Test public void datetrans() throws ParseException { String str1 = "2017-08-16"; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date d1 = sdf1.parse(str1); System.out.println(d1); } }
2.解释何为编码?解码? 何为日期时间的格式化?解析?
编码:字符串→字节
解码:字节→字符串
格式化:日期→字符串
(SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。 )
解析:字符串→日期
(parse:解析字符串的文本,生成 Date
。 )
3.提供定制排序涉及到的接口的实现类对象,并按Person类的年龄从大到小排序。
package www.fancy.exer; import java.util.Arrays; import java.util.Comparator; public class Person { protected String name ; protected int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } 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 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 -1; } return 0; } throw new RuntimeException("不正确的输入"); } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
- 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码, 或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那 么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排 序的比较。
- 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返 回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示 o1小于o2。
- 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort), 从而允许在排序顺序上实现精确控制。
- 还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的 顺序,或者为那些没有自然顺序的对象 collection 提供排序。
class Test { public static void main(String[] args) { Person[] arr = new Person[4]; arr[0] = new Person("fanfan", 24); arr[1] = new Person("fengfeng", 25); arr[2] = new Person("Ahuzhu", 27); arr[3] = new Person("dazhuzhu", 28); Arrays.sort(arr, new Comparator() { @Override public int compare(Object o1, Object o2) { Person p1 = (Person) o1; Person p2 = (Person) o2; return p1.compareTo(p2); } }); System.out.println(Arrays.toString(arr)); } }
最终实现了按年龄排序,结果如下:
[Person{name='fanfan', age=24}, Person{name='fengfeng', age=25}, Person{name='Ahuzhu', age=27}, Person{name='dazhuzhu', age=28}]
5. JDK 8之前和JDK8中日期、时间相关的类分别有哪些?
JDK 8之前:
- java.util.Date/java,sql.Date
- SimpleDateFormat
- Calendar
JDK8中:
- instant
- DateTimeFormat
- LocalDate、LocalTime、LocalDateTime