Discuss / Java / 覆写equals和hashCode方法

覆写equals和hashCode方法

Topic source

给出一种解决方法,覆写equals和hashCode方法,规定不能传入相同的Message,创造Set接收List为参数,相反再创建List时接收Set为参数。

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;

public class Test {
    public static void main(String[] args) throws IOException {
        List<Message> received = new ArrayList();
        received.add(new Message(1, "Hello!"));
        received.add(new Message(2, "发工资了吗?"));
        received.add(new Message(2, "发工资了吗?"));
        received.add(new Message(3, "去哪吃饭?"));
        received.add(new Message(3, "去哪吃饭?"));
        received.add(new Message(4, "Bye"));
        List<Message> displayMessage = process(received);
        for (Message message : displayMessage) {
            System.out.println(message.text);
        }
    }
    
    static List<Message> process(List<Message> received) {
        Set<Message> set = new HashSet<>(received);
        List<Message> receive = new ArrayList<>(set);
        return receive;
    }
}

class Message {
    public final int sequence;
    public final String text;
    
    public Message(int sequence, String text) {
        this.sequence = sequence;
        this.text = text;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof Message) {
            Message e = (Message)o;
            return this.sequence ==e.sequence;
        }
        return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(sequence);
    }
}

  • 1

Reply