您不想使用hashCode()
,因爲這樣,兩個不同的GUIDS可能會導致相同的ID。
只需編碼一個映射。事情是這樣的......
private static class GuidToIdMap {
private final Map<String, Long> guidToIdMapping = new HashMap<String, Long>();
private final Map<Long, String> idToGuidMapping = new HashMap<Long, String>();
private long idGenerator = 0;
public long getIdByGuid(final String guid) {
if (! guidToIdMapping.containsKey(guid)) {
final long id = idGenerator++;
guidToIdMapping.put(guid, id);
idToGuidMapping.put(id, guid);
}
return guidToIdMapping.get(guid);
}
public String getGuidById(final long id) {
if (idToGuidMapping.containsKey(id)) {
return idToGuidMapping.get(id);
}
return null;
}
}
private final GuidToIdMap guidToIdMap = new GuidToIdMap();
@Override
public boolean hasStableIds() {
return true;
}
@Override
public long getItemId(int position) {
final String guid = this.getItem(position).getId();
return guidToIdMap.getIdByGuid(guid);
}
// Use guidToIdMap.getGuidById(id) where the Android Framework passes you the generated id
對性能的影響可以忽略不計....
兩個不同的字符串可能會返回相同的hashCode()... – Niels 2016-10-04 08:38:13
@Niels肯定!但是我的話無論如何都是對的。相同的字符串是相同的哈希值,即使它不是相同的字符串,但意外地具有相同的哈希值,它也是Java固有的。 – eduyayo 2016-10-04 08:41:02