@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Droplet)) return false;

        Droplet droplet = (Droplet) o;

        if (ringNum != droplet.ringNum) return false;
        if (expression != null ? !expression.equals(droplet.expression) : droplet.expression != null) return false;
        if (ring != null ? !ring.equals(droplet.ring) : droplet.ring != null) return false;
        if (tree != null ? !tree.equals(droplet.tree) : droplet.tree != null) return false;

        return true;
    }