net.minecraft.block.RedstoneWireBlock#update 235行
fallen说的打乱顺序就在这块
net.minecraft.util.math.Vec3i#hashCode 74行
h = x + y * 31 + z * 31 * 31
java.util.HashSet#map 107行
HashSet内部调用了HashMap
java.util.HashMap#hash 336行
h ^ (h >>> 16)
java.util.HashMap#putVal 631行
因为是默认的HashMap,也不需要扩容,所以容量n(tab.length)是16
i = (n - 1) & hash 实际就是 hash & 15
不考虑冲突的情况,这就是遍历时的顺序
具体某个坐标方法的算法
h = x + y * 31 + z * 31 * 31
hash = (h xor (h >>> 16)) & 15
然后根据hash排序,小的优先
ss.jar (5.5 KB)