transient关键字问题在TreeSet中的疑惑

transient关键字的对象是不参与序列化的,TreeSet中保存数据的变量m就是被transient修饰的,理论上是不被序列化的,但为什么反序列化后treeset还会有数据?

并不是说有transient关键字修饰的变量就一定不会被序列化,transient是针对系统来说的,此类中如果有自定义readObject和writeObject方法,方法中已经对transient变量作了序列化处理,那么还是可以被序列化的。
下面是例子,若没有read和write方法,那么变量a序列化完后会是0,若有则是序列化的值。

static class Bean implements Serializable {
    private static final long serialVersionUID = 2966031808490167073L;
    int x = -1, y = -1, z = -1;
    transient int a = -1;
    private void writeObject(ObjectOutputStream stream) throws IOException {
        stream.writeInt(x);
        stream.writeInt(y);
        stream.writeInt(z);
        stream.writeInt(a);
    }
    private void readObject(ObjectInputStream inputStream) throws IOException {
        x = inputStream.readInt();
        y = inputStream.readInt();
        z = inputStream.readInt();
        a = inputStream.readInt();
    }
    @Override
    public String toString() {
        return "Bean{" +
                "x=" + x +
                ", y=" + y +
                ", z=" + z +
                ", a=" + a +
                '}';
    }
}

writeObject()方法最后不是有个循环嘛。