您的位置:首页 > 移动开发 > Android开发

根据PHP习惯开发android中遇到的问题

2014-07-01 00:00 471 查看
1.时间戳问题(java时间戳精确到毫秒)

php当中的时间戳精确到秒,刚开始接触android时,想当然的以为java中的时间戳会跟php当中一样,结果调试了半天程序都有问题。后来把时间戳打印出来发现是13位的,才知道java中时间戳是精确到毫秒的。

2.put()方法

JSONObject test = new JSONObject();

for (int i=0;i<10;i++){
 try {
test .put(""+i, i);
 } catch (JSONException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }
 System.out.println(test );

当时以为程序输出的结果会是从0到9排列的键值对,然而实际上的输出结果却是


查了下源码,JSONObject实际上引用的是HashMap中put()方法。附HashMap put()源码:

public V put(K key, V value) {
 // 如果 key 为 null,调用 putForNullKey 方法进行处理
 if (key == null)
 return putForNullKey(value);
 // 根据 key 的 keyCode 计算 Hash 值
 int hash = hash(key.hashCode());
 // 搜索指定 hash 值在对应 table 中的索引
 int i = indexFor(hash, table.length);
 // 如果 i 索引处的 Entry 不为 null,通过循环不断遍历 e 元素的下一个元素
 for (Entry<K,V> e = table[i]; e != null; e = e.next)
 {
 Object k;
 // 找到指定 key 与需要放入的 key 相等(hash 值相同
 // 通过 equals 比较放回 true)
 if (e.hash == hash && ((k = e.key) == key
 || key.equals(k)))
 {
 V oldValue = e.value;
 e.value = value;
 e.recordAccess(this);
 return oldValue;
 }
 }
 // 如果 i 索引处的 Entry 为 null,表明此处还没有 Entry
 modCount++;
 // 将 key、value 添加到 i 索引处
 addEntry(hash, key, value, i);
 return null;
}





当程序试图将一个 key-value 对放入 HashMap 中时,程序首先根据该 key 的 hashCode() 返回值决定该 Entry 的存储位置:如果两个 Entry 的 key 的 hashCode() 返回值相同,那它们的存储位置相同。如果这两个 Entry 的 key 通过 equals 比较返回 true,新添加 Entry 的 value 将覆盖集合中原有 Entry 的 value,但 key 不会覆盖。如果这两个 Entry 的 key 通过 equals 比较返回 false,新添加的 Entry 将与集合中原有 Entry 形成 Entry 链,而且新添加的 Entry 位于 Entry 链的头部。

(未完待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: