Java基础比较器和国际化4月打卡day19
Java基础之多线程(综合案例)4月打卡day19
关于作者
-
作者介绍
🍓 博客主页:
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻。
1.1 Comparable
对象数组排序:public static void sort(Object[] a)
package com.day13.demo;
import java.util.Arrays;
class Pers{
private String name;
private int age;
public Pers(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;
}
@Override
public String toString() {
return "Pers [name=" + name + ", age=" + age + "]";
}
}
public class ComparableDemo {
public static void main(String[] args) {
Pers pers[] = new Pers[]{
new Pers("张三",12),
new Pers("李四",23),
new Pers("刘武",54)//对象数组
};
Arrays.sort(pers);//要进行对象数组的排序处理
System.out.println(Arrays.toString(pers));
}
}
这个时候没有任何的语法错误,即:程序的代码是正确的,但是在程序执行的时候出现了以下的问题:
Exception in thread "main" java.lang.ClassCastException: com.day13.demo.Pers cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
at java.util.Arrays.sort(Arrays.java:1246)
at com.day13.demo.ComparableDemo.main(ComparableDemo.java:36)
明确的告诉用户现在发生了“ClassCaseException”,类转换异常,Person类不能变为Comparables实例。
如果要为对象指定比较规则,那么对象所在的类必须实现Comparable接口,下面首先来看一下这个接口的定义:
public interface Comaparable<T>{
public int compareTo(T o)
}
Stirng类中的compareTo()就属于覆写Comaparable接口所的来的方法。
实现对象数组的排序
package com.day13.demo;
import java.util.Arrays;
class Pers implements Comparable<Pers>{
private String name;
private int age;
public Pers(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;
}
@Override
public String toString() {
return "Pers [name=" + name + ", age=" + age + "]\n";
}
@Override
public int compareTo(Pers o) {
// TODO Auto-generated method stub
//升序排序 如果降序排序将1 和 -1 进行位置调换
if(this.age > o.age){
return -1;
}else if(this.age < o.age){
return 1;
}else{
return 0;
}
}
}
public class ComparableDemo {
public static void main(String[] args) {
Pers pers[] = new Pers[]{
new Pers("张三",12),
new Pers("李四",23),
new Pers("刘武",54)//对象数组
};
Arrays.sort(pers);//要进行对象数组的排序处理
System.out.println(Arrays.toString(pers));
}
}
只要是对象数组排序,就必须有Comparable接口。
1.2 二叉树( Binary Tree )
二叉树是一种排序的基本的数据结构,而如果要想为多个对象进行排序,那么就必须可以区分出对象的大小,那么就必须依靠Comparable接口完成。
二叉树的基本原理:取第一个元素作为根节点,之后每一个元素的排列要求:如果比根节点晓得数据放在左子树,如果比根节点大的数据放在右子树,在输出的时候采用中序(左-根-右)遍历的方式完成。
但是不管是何种方式操作,一定要记住,这种数据结构的实现永远都需要依靠节点类,而这个时候的节点类要保存两个节点:左,右。
2、国际化
在java.util.Locale可以找java提供国际化的相关信息
Locale构造:public Locale(String language, String country)
观察区域和语言代码
package com.day13.demo;
import java.util.Locale;
public class LocalDemo {
public static void main(String[] args) {
System.out.println(Locale.CHINA);//zh_CN
System.out.println(Locale.CHINESE);//zh
}
}
-
中国Locale:public static final Locale CHINESE
-
美国Locale:public static final Locale US
-
取得当前的Locale对象:public static Locale getDefault()
当我们用eclipse打开Message.properties进行编写后不要慌,我们还有一个非常强大的工具在JDK中,CLASSPATH:C:\Program Files\Java\jdk1.8.0_241\bin 自己安装JDK的环境目录下有一个叫native2ascii.exe可以帮助我们进行转码。这种做法非常麻烦,如果要开发国际版本的软件还是自己安装一个编辑软件比较好。
语言配置文件Message.properties
welcome.info = \u5317\u4EAC\u6B22\u8FCE\u4F60\uFF01
测试文件LocaleDemo.java
package com.day13.demo;
import java.util.ResourceBundle;
public class LocaleDemo {
public static void main(String[] args) {
//这个时候设置的baseName没有后缀,而且一定要在CLASSPATH之中
ResourceBundle res = ResourceBundle.getBundle("com.day13.msg.Message");
//北京欢迎你!
System.out.println(res.getString("welcome.info"));
}
}
资源文件的名称就只是 包.名称前缀
- 点赞
- 收藏
- 关注作者
评论(0)