2021 非科班生的 Java 面试之路,set 集合
2.HashSet 判断重复
用 hashset 判断是否重复,需要重写 hashset 和 equals 方法
如果没写请看下图
控制台内打印了四个对象,说明并没有去重
以下是重写了 hashcode 和 equals 方法后的结果,为了方便大家理解,我分别在两个方法内打印了一条语句
?
由控制台结果来看 hashcode 方法被调用了四次,说明每添加一个对象就会调用一次 hashcode,hashcode 用来判断地址,equals 方法用来判断内容?当 hashcode 判断地址正确时,才会调用 equals 方法,所以 equals 只打印了一遍
在这里 hashcode 相当于过滤,减少了部分代码的运行
3.TreeSet 自然排序
自然排序对象需要实现自然排序接口
在这里 TreeSet 需要实现 comparable 接口,如果不实现会出现下面错误
如果想要根据指定需求进行排序,需要在重写的 compareTo 方法里面进行相对操作
举个例子
public class demo2 {
public static void main(String[] args) {
?? ?TreeSet<user> set = new TreeSet<user>();
?? ?set.add(new user("aaa", 13));
?? ?set.add(new user("ccc", 14));
?? ?set.add(new user("bbb", 12));
?? ?for (user s : set) {
?? ??? ?System.out.println(s);
?? ?}
}
}
class user implements Comparable{
?? ?private String name;
?? ?private int price;
?? ?public String getName() {
?? ??? ?return name;
?? ?}
?? ?public void setName(String name) {
?? ??? ?this.name = name;
?? ?}
?? ?public int getPrice() {
?? ??? ?return price;
?? ?}
?? ?public void setPrice(int price) {
?? ??? ?this.price = price;
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return "user [name=" + name + ", price=" + price + "]";
?? ?}
?? ?public user(String name, int price) {
?? ??? ?super();
?? ??? ?this.name = name;
?? ??? ?this.price = price;
?? ?}
?? ?public user() {
?? ?}
?? ?@Override
?? ?public int compareTo(Object o) {
?? ??? ?user u=(user) o;
?? ??? ?return this.price-u.price;
?? ?}
}
运行输出的结果就会根据 price 排序
这样写也有个弊端,因为不同的模块有不同的需求,对于一张表有不同的排序规则,这个时候这个方法就不合适了,就要用到比较器进行排序
package com.set;
import java.util.Comparator;
import java.util.TreeSet;
public class demo3 {
public static void main(String[] args) {
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂 java 程序员面试涉及到的绝大部分面试题及答案免费分享给大家,希望能帮助到大家,有需要的朋友可以看下面的免费领取方式!
评论