/**
* 一个自定义对象,比较用
*/
public class User {
private String id;
private int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
import java.util.Arrays;
/**
* 强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过<br/>
* Collections.sort或Arrays.sort进行自动排序。
*/
public class SimpleComparable implements Comparable<Object> {
/**
* @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。
*/
@Override
public int compareTo(Object o) {
return this.age - ((SimpleComparable) o).getAge();
}
private String id;
private int age;
public SimpleComparable(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
/**
* 测试方法
*/
public static void main(String[] args) {
SimpleComparable[] users = new SimpleComparable[] {
new SimpleComparable("a", 30), new SimpleComparable("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
SimpleComparable user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
import java.util.Arrays;
import java.util.Comparator;
/**
* 本例子是为了和SimpleComparable比较用<br/>
* (1)、Comparator 是不对排序对象本身做修改<br/>
* (2)、Comparable 则需要排序对象是实现<br/>
* 一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象<br/>
* 组成的集合就可以直接使用sort方法排序。<br/.
* Comparator可以看成一种算法的实现,将算法和数据分离,Comparator在下面两种环境下使用:
* (1)、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现<br/>
* 排序而不必改变对象本身 <br/>
* (2)、可以使用多种排序标准,比如升序、降序等
*/
public class SimpleComparator implements Comparator<Object> {
/**
* @return o1小于、等于或大于o2,分别返回负整数、零或正整数。
*/
@Override
public int compare(Object o1, Object o2) {
return ((User) o1).getAge() - ((User) o2).getAge();
}
/**
* 强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给<br/>
* Collections.sort或Arrays.sort。
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 30), new User("b", 20) };
Arrays.sort(users, new SimpleComparator());
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
分享到:
相关推荐
List 可以使用 Collections.sort 方法进行排序,也可以自定义 Bean 实现 Comparable 接口或实现 Comparator 接口自定义比较器。 Java Map 集合中,我们常用的 Map 集合有 HashMap、HashTable、TreeMap、...
15. **COLLECTION框架中实现比较**:实现`Comparable`或`Comparator`接口。 16. **字符串截取**:需要注意对中文字符的处理,避免截断。 17. **打印昨天的当前时刻**:使用`Calendar`或`LocalDateTime`类。 18. *...
10. 数据库查询通常使用JDBC,排序可以通过Collections.sort(),实现Comparable或Comparator接口进行比较,序列化则需要实现Serializable接口。 11. JSP中的动态INCLUDE使用,可以传参数,静态INCLUDE使用,类似于...
我们将对 Java 高级面试题进行总结和分析,涵盖了 Java 面试题的方方面面,从数据类型转换到框架选择,从线程池状态到 Java 8 的元空间替换,从跳出多重循环到 JSON 对象解析,从 Comparable 和 Comparator 的区别到...
Java 后端开发是软件行业中一个重要的领域,其面试题涵盖了广泛的编程概念和技术。这份PDF文档显然为准备Java后端面试的候选人提供了丰富的学习资源。以下是对标题和描述中涉及的一些核心知识点的详细解释: 1. **...
这些面试题涉及了Java集合框架的基础和高级用法,熟练掌握这些知识点将有助于你在面试中展现出扎实的Java基础和问题解决能力。在实际开发中,理解并运用这些概念可以提高代码质量和性能。不断练习和深入学习,你将...
Java是一种广泛使用的面向对象的编程语言,其面试题涵盖了各种概念和技术。以下是对部分Java面试题的详细解释: 1. **super()与this()的区别**: - `this`关键字用于引用当前对象,而`super`关键字则用来访问父类...
以下是一些 Java 集合方面的面试题: Java 中集合框架的主要接口是什么? ArrayList 和 LinkedList 有什么区别? HashSet 和 TreeSet 有什么区别? HashMap 和 TreeMap 有什么区别? 什么是迭代器?如何使用它来遍历...
### Java企业面试题知识点梳理 #### 一、Java面向对象基础 **1. super()与this()的区别** - **super()**: 是指父类构造器的引用,用于调用父类的构造方法或访问父类的成员。在子类构造器中使用 `super()` 可以调用...
此外,面试题可能涵盖泛型、迭代器、Comparable与Comparator接口、TreeSet与TreeMap的排序原理等。 4. **异常处理**:理解try-catch-finally语句块、异常的分类(检查异常和运行时异常)、自定义异常以及如何优雅地...
JAVA 综合面试题 本资源主要面向初级 Java 开发工程师,涵盖了 Java 基础类型的题目,包括面向对象、编程输出、事件委托机制、垃圾回收机制、序列化、排序、Override、继承、内部类、Collection 框架等方面。 1. ...
### Java经典面试题知识点解析 #### 1. super()与this()的区别? - **super()**:用于调用父类的构造方法。在一个子类的构造方法中,如果要调用父类的构造方法,必须使用`super()`,并且这个调用语句必须放在子类...
以上只是部分Java高级面试题的关键知识点,实际面试中,面试官可能会根据这些基础深入提问,要求候选人具备扎实的理论基础和实践经验。为了在面试中脱颖而出,除了熟悉这些知识点,还需要结合实际项目经验进行阐述和...
为了在Java面试中脱颖而出,了解和掌握各种常见的面试与笔试题至关重要。以下是一些基于标题和描述所提及的知识点的详细说明,涵盖了Java SE(标准版)和Java EE(企业版)的相关内容。 1. **基础语法**: - 变量...
这些只是Java面试题的部分内容,涵盖了许多基础和进阶主题,包括面向对象、类和对象、内存管理、集合框架、多线程、异常处理、I/O流、网络编程等。深入理解和掌握这些知识点对于成为一位优秀的Java开发者至关重要。
Java程序员面试题是评估应聘者技能和知识的重要方式,涵盖了从基础语法到高级概念的广泛领域。以下是一些常见的Java面试知识点,它们可能出现在不同公司的面试中: 1. **Java基础知识**:面试通常会从Java的基本...
【Java 华为面试题详解】 在 Java 面试中,华为公司常常会考察候选人的基础理论知识、编程实践以及并发处理等能力。以下是对这些面试题的详细解析: 1. **面向对象的特征** - 封装:隐藏对象的属性和实现细节,仅...