189 8069 5689

android键值对,Java 键值对

Android里不是键值对格式的JSON怎么解析

举个实例:

我们提供的服务有:网站建设、成都做网站、微信公众号开发、网站优化、网站认证、来凤ssl等。为上千多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的来凤网站制作公司

[

["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数据不是键值对的格式

解决方法 : 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解析,你可以通过字符串处理先将数据转成JSON格式,然后再解析,需要转换成JSON格式如下:

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

android xml资源数组的问题 xml文件内容如下,我要怎么获取item键值对中name这个

假设准备好的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

假设要获得 "shanghai"对应的值,可以参考以下函数:

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开发中ArrayMap与HashMap有哪些不同

1、存储方式不同

HashMap内部有一个HashMapEntryK, V[]对象,每一个键值对都存储在这个对象里,当使用put方法添加键值对时,就会new一个HashMapEntry对象,具体实现如下:

[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;

}

//创建对象存储键值对

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

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

}

ArrayMap的存储中没有Entry这个东西,他是由两个数组来维护的

[java] view plaincopy

int[] mHashes;

Object[] mArray;

mHashes数组中保存的是每一项的HashCode值,mArray中就是键值对,每两个元素代表一个键值对,前面保存key,后面的保存value,我们看看下面代码的结果:

[java] view plaincopy

arraymap = new HashMapString, String();

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

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

执行上面代码后,arraymap中的存储是这样的

是不是能清楚地看到ArrayMap的存储了,这种存储在put代码中如下:

[java] view plaincopy

mHashes[index] = hash;

mArray[index1] = key;

mArray[(index1)+1] = value;

2、添加数据时扩容时的处理不一样

先来看看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操作,重新创建对象,开销很大。

那么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;

//分配数组

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);

}

//释放无用空间,收缩数组

freeArrays(ohashes, oarray, mSize);

}

ArrayMap用的是copy数据,所以效率相对要高。

3、ArrayMap提供了数组收缩的功能,在clear或remove后,会重新收缩数组,是否空间

4、ArrayMap采用二分法查找;

以上就是android开发中,HashMap与ArrayMap的区别,大家在涉及到内存方面的实现,可根据实际情况选择这两种不同的方式。


标题名称:android键值对,Java 键值对
分享URL:http://cdxtjz.cn/article/dscsgpo.html

其他资讯