将数组列表转换为稀疏数组

时间:2017-02-06 13:43:09

标签: android arrays sparse-matrix

我已从项目中复制了一些代码,并希望在我的私有应用中重用其中的一小部分。

该类包含稀疏数组

public class GolfResult {

    String hcpAfter;
    String hcpBefore;
    SparseArray roundResults;

    public GolfResult() {
        hcpAfter = "";
        hcpBefore = "";
        roundResults = new SparseArray();
    }
}

我为ArrayList创建了一个充满必要数据的roundResults

然后我试图用内容填充实例。

GolfResult golferRes = new GolfResult();
SparseArray<RoundResults> hu= new SparseArray<>();
hu = roundresults; // *
golferRes.setHcpAfter("33");
golferRes.setHcpBefore("kk");
golferRes.setRoundResults(hu);

但问题是hu = roudresults是不可能的,因为错误消息:

  

必需:Android.util.SparseArray找到:java.util.Array List

欢迎任何帮助。

在收到两个有用的答案之后我又向前迈了一步,但现在我遇到的问题是我的SparseArray hu是空的{}。

胡的内容应该是具有以下结构的班级结果:

public class RoundResults {
boolean actualRound;
private List<HoleResult> holeResults;
Integer roundId;
Integer roundNumber;
String unfinishedReason;

arrayList roundresults的大小为1,并且在对象中有数据。

unfinishedReason =""
holeResults = ArrayLIST size= 18
roundID = "1"
roundNumber = "1"
actualRound = true

hu = {}

mValues = All elements are null
mSize = 0

有人知道为什么吗?

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题,也许你可以试试这个:

for ( int i=0; i<roundresults.size(); i++ ) {
    hu.put(i,roundresults.get(i));
}

答案 1 :(得分:1)

SparseArray与documentation

中的ArrayList不同
  

SparseArrays 将整数映射到对象。不像普通的数组   对象,索引中可能存在空白。它的目的是更多   内存比使用HashMap将Integers映射到Objects更有效   因为它避免了自动装箱键,其数据结构并不依赖   在每个映射的额外入口对象上。

它使用键值对原则,其中键是整数,键映射是对象的值。你需要使用put [(int key,E value)](https://developer.android.com/reference/android/util/SparseArray.html#put(int,E)),其中E是你的对象。请记住:

  

添加从指定键到指定值的映射,   指定密钥替换以前的映射(如果有)   之一。

所以你需要使用一个循环来添加ArrayList中的每个对象,如@ valentino-s所说:

SparseArray<RoundResults> hu= new SparseArray<>();
for( int i = 0; i < roundresults.size(); i++) {
  // i as the key for the object.
  hu.put(i, roundresults.get(i));
}

答案 2 :(得分:0)

经过一些试验和错误后,我找到了空胡的解决方案:

而不是把我使用追加,现在它正在工作。

hu.append(i, roundresults.get(i));

啤酒的时间。