QDataSet is the model used to store all data in Das2 (and Autoplot). The QDataSet can be thought of as a fast Java array that has name-value metadata attached to it. These arrays of data can have arbitrary rank, although currently the interface limits rank to 0, 1, 2, 3, and 4. (A high-rank Rank N dataset which can only be sliced is available.) Each dimension's length can vary, like Java arrays, and datasets where the dimensions do not vary in length are colloquially called "Qubes." See https://autoplot.org/QDataSet
QDataSets can have other QDataSets as property values, for example the property QDataSet.DEPEND_0 indicates that the values are dependent parameters of the "tags" QDataSet found there. This how how we get to the same abstraction level of the legacy das2 dataset.
There are many implementations of QDataSet. For example, org.das2.qds.buffer.FloatDataSet is a QDataSet which is implemented using Java NIO to access memory (sometimes directly from a memory-mapped file), and org.das2.qds.FDataSet provides rank 2 access to a 1-D Java array. The class org.das2.qds.IndexGenDataSet simply returns the index as the data.
Mutable datasets warning: Many of the QDataSet implementations are mutable, meaning that values can be changed. Generally clients can expect that QDataSets are immutable, so no dataset should be modified once it is accessible to the rest of the system. This would require clients make defensive copies which would seriously degrade performance. Note mutable datasets (e.g. MutablePropertyDataSet) have a makeImmutable() method that will throw a runtime exception when clients attempt to write to the dataset.