龙空技术网

Java修炼终极指南:152 布局展平

启辰8 51

前言:

而今姐妹们对“javaseq”大概比较注意,兄弟们都想要知道一些“javaseq”的相关资讯。那么小编同时在网络上收集了一些对于“javaseq””的相关文章,希望我们能喜欢,兄弟们快快来了解一下吧!

让我们假设我们有以下嵌套模型(与问题151中的模型完全相同):

SequenceLayout innerSeq = MemoryLayout.sequenceLayout(5, ValueLayout.JAVA_DOUBLE);SequenceLayout outerSeq = MemoryLayout.sequenceLayout(10, innerSeq);

接下来,我们通过PathElement定义一个VarHandle,并用一些随机数据相应地填充这个模型(你可以在问题151中看到列出的代码)。我们的目标是获取这个嵌套模型,并得到一个平面模型。也就是说,我们不想拥有10个包含5个双精度浮点数的序列,而是想要一个包含50个双精度浮点数的单一序列。这可以通过flatten()方法实现,如下所示:

SequenceLayout flatten = outerSeq.flatten();           VarHandle fhandle = flatten.varHandle(  PathElement.sequenceElement());           for (int i = 0; i < flatten.elementCount(); i++) {  System.out.printf("\nx = %.2f", fhandle.get(segment, i));}

注意PathElement,它遍历了一个单一序列。这是展平操作后得到的序列。我们可以进一步为这个序列分配另一个内存段,并设置新数据:

复制

try (Arena arena = Arena.openConfined()) { MemorySegment segment = arena.allocate(flatten); for (int i = 0; i < flatten.elementCount(); i++) { fhandle.set(segment, i, Math.random()); } }

接下来,让我们看看如何重新塑形一个内存布局。

标签: #javaseq