写点什么

2021 非科班生的 Java 面试之路,set 集合

发布于: 3 小时前

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 程序员面试涉及到的绝大部分面试题及答案免费分享给大家,希望能帮助到大家,有需要的朋友可以看下面的免费领取方式


资料领取方式:狂戳这里




用户头像

VX:Lzzzzzz63 领取资料 2021.07.07 加入

还未添加个人简介

评论

发布
暂无评论
2021非科班生的Java面试之路,set集合