真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android鍵值對,Java 鍵值對

Android里不是鍵值對格式的JSON怎么解析

舉個實例:

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、來鳳ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的來鳳網(wǎng)站制作公司

[

["5","\u9760\u7a97",false,true,

[

["2","1h",false,false],

["3","2h",true,true],

["4","3h",false,false],

["5","4h",false,false],

["6","5h",false,false]]],

["4","\u65e7\u91d1\u5c71",false,false,

[

["1","\u65e7\u91d1\u5c71",false,false]

]

]

]

這樣的JSON數(shù)據(jù)不是鍵值對的格式

解決方法 : public static void downAreaTable(JsonArray jsonData) {PadUtil.areaTables = null;JsonArray array2;JsonArray array3;JsonArray array4;int len = jsonData.getAsJsonArray().size();if (len 0) {areaTables = new HashMapTable, Area();for (int i = 0; i len; i++) {array2 = jsonData.getAsJsonArray().get(i).getAsJsonArray();Area area = new Area(Integer.parseInt(array2.get(0).getAsString()), array2.get(1).getAsString(), array2.get(1).getAsString(), array2.get(2).getAsBoolean()); array3 = array2.get(4).getAsJsonArray(); for (int j = 0; j array3.size(); j++) {array4 = array3.get(j).getAsJsonArray();Table table = new Table(Integer.parseInt(array4.get(0).getAsString()), array4.get(1).getAsString(),array4.get(1).getAsString(), area, array4.get(2).getAsBoolean());areaTables.put(table, area);}}}}

android、java解析string中的鍵值對問題

不可直接使用JSON解析,你可以通過字符串處理先將數(shù)據(jù)轉(zhuǎn)成JSON格式,然后再解析,需要轉(zhuǎn)換成JSON格式如下:

network:{ ssid:"nn6yywifi1" , psk:"88888888" , key_mgmt:"WPA-PSK" , priority:"218"}

android xml資源數(shù)組的問題 xml文件內(nèi)容如下,我要怎么獲取item鍵值對中name這個

假設(shè)準備好的xml是

string-array name="names"

item shanghai/item

item beijing/item

item hongkong/item

/string-array

string-array name="values"

item 021/item

item 010/item

item 00852/item

/string-array

假設(shè)要獲得 "shanghai"對應的值,可以參考以下函數(shù):

public String getAreaCode(String cityName) {

String[] names = getResources().getStringArray(R.array.names);

String[] values = getResources().getStringArray(R.array.values);

for (int i = 0; i names.length; i++) {

if (names[i].equals(cityName)) {

return values[i];

}

}

return null;

}

Android開發(fā)中ArrayMap與HashMap有哪些不同

1、存儲方式不同

HashMap內(nèi)部有一個HashMapEntryK, V[]對象,每一個鍵值對都存儲在這個對象里,當使用put方法添加鍵值對時,就會new一個HashMapEntry對象,具體實現(xiàn)如下:

[java] view plaincopy

@Override public V put(K key, V value) {

if (key == null) {

return putValueForNullKey(value);

}

int hash = secondaryHash(key);

HashMapEntryK, V[] tab = table;

int index = hash (tab.length - 1);

//先查找有沒有對應的key值,如果有,就改寫value,并返回改寫前的value值:oldValue

for (HashMapEntryK, V e = tab[index]; e != null; e = e.next) {

if (e.hash == hash key.equals(e.key)) {

preModify(e);

V oldValue = e.value;

e.value = value;

return oldValue;

}

}

// No entry for (non-null) key is present; create one

modCount++;

if (size++ threshold) {

//擴容,雙倍

tab = doubleCapacity();

index = hash (tab.length - 1);

}

addNewEntry(key, value, hash, index);

return null;

}

//創(chuàng)建對象存儲鍵值對

void addNewEntry(K key, V value, int hash, int index) {

table[index] = new HashMapEntryK, V(key, value, hash, table[index]);

}

ArrayMap的存儲中沒有Entry這個東西,他是由兩個數(shù)組來維護的

[java] view plaincopy

int[] mHashes;

Object[] mArray;

mHashes數(shù)組中保存的是每一項的HashCode值,mArray中就是鍵值對,每兩個元素代表一個鍵值對,前面保存key,后面的保存value,我們看看下面代碼的結(jié)果:

[java] view plaincopy

arraymap = new HashMapString, String();

a.put("a", "a_value");

a.put("b", "b_value");

執(zhí)行上面代碼后,arraymap中的存儲是這樣的

是不是能清楚地看到ArrayMap的存儲了,這種存儲在put代碼中如下:

[java] view plaincopy

mHashes[index] = hash;

mArray[index1] = key;

mArray[(index1)+1] = value;

2、添加數(shù)據(jù)時擴容時的處理不一樣

先來看看HashMap

[java] view plaincopy

if (size++ threshold) {

tab = doubleCapacity();

index = hash (tab.length - 1);

}

doubleCapacity進行雙倍擴容,它的代碼中有這么一句話

[java] view plaincopy

HashMapEntryK, V[] newTable = makeTable(newCapacity);

最終,這個newTable將作為擴容后的新對象返回,那么makeTable做了什么呢,如下:

[java] view plaincopy

private HashMapEntryK, V[] makeTable(int newCapacity) {

@SuppressWarnings("unchecked") HashMapEntryK, V[] newTable

= (HashMapEntryK, V[]) new HashMapEntry[newCapacity];

table = newTable;

threshold = (newCapacity 1) + (newCapacity 2); // 3/4 capacity

return newTable;

}

我們清楚地看到,這里進行了new操作,重新創(chuàng)建對象,開銷很大。

那么ArrayMap呢,看看:

[java] view plaincopy

//如果容量不夠

ize = mHashes.length) {

final int n = mSize = (BASE_SIZE*2) ? (mSize+(mSize1))

: (mSize = BASE_SIZE ? (BASE_SIZE*2) : BASE_SIZE);

if (DEBUG) Log.d(TAG, "put: grow from " + mHashes.length + " to " + n);

final int[] ohashes = mHashes;

final Object[] oarray = mArray;

//分配數(shù)組

allocArrays(n);

if (mHashes.length 0) {

if (DEBUG) Log.d(TAG, "put: copy 0-" + mSize + " to 0");

//特別注意這,是copy,而不是new,效率提升

System.arraycopy(ohashes, 0, mHashes, 0, ohashes.length);

System.arraycopy(oarray, 0, mArray, 0, oarray.length);

}

//釋放無用空間,收縮數(shù)組

freeArrays(ohashes, oarray, mSize);

}

ArrayMap用的是copy數(shù)據(jù),所以效率相對要高。

3、ArrayMap提供了數(shù)組收縮的功能,在clear或remove后,會重新收縮數(shù)組,是否空間

4、ArrayMap采用二分法查找;

以上就是android開發(fā)中,HashMap與ArrayMap的區(qū)別,大家在涉及到內(nèi)存方面的實現(xiàn),可根據(jù)實際情況選擇這兩種不同的方式。


本文標題:android鍵值對,Java 鍵值對
分享路徑:http://weahome.cn/article/dscsgpo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部