『壹』 如何通過獲取map中的key來獲得與key對應的value值,進行運算
獲取map的key和value的方法分為以下兩種形式:
1、map.keySet():先獲取map的key,然後根據key獲取對應的value;
2、map.entrySet():同時查詢map的key和value,只需要查詢一次;
注意:當map的value值相等時,根據key值進行排序
很多人都推薦使用entrySet,認為其比keySet的效率高很多。理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,針對每個key,都要去Map中額外查找一次value,從而降低了總體效率。
兩種方法對比測試如下:
HashMap測試數據:
(1)安卓qmap是什麼意思擴展閱讀:
map.keySet()和map.EntrySet()的比較:
一、如果使用HashMap
1、同時遍歷key和value時,keySet與entrySet方法的性能差異取決於key的具體情況,如復雜度(復雜對象)、離散度、沖突率等。換言之,取決於HashMap查找value的開銷。
entrySet一次性取出所有key和value的操作是有性能開銷的,當這個損失小於HashMap查找value的開銷時,entrySet的性能優勢就會體現出來。
在比測試中,當key是最簡單的數值字元串時,keySet可能反而會更高效,耗時比entrySet少10%。總體來說還是推薦使用entrySet。
因為當key很簡單時,其性能或許會略低於keySet,但卻是可控的;而隨著key的復雜化,entrySet的優勢將會明顯體現出來。當然,我們可以根據實際情況進行選擇
2、只遍歷key時,keySet方法更為合適,因為entrySet將無用的value也給取出來了,浪費了性能和空間。在上述測試結果中,keySet比entrySet方法耗時少23%。
3、只遍歷value時,使用vlaues方法是最佳選擇,entrySet會略好於keySet方法。
二、如果使用TreeMap
1、同時遍歷key和value時,與HashMap不同,entrySet的性能遠遠高於keySet。這是由TreeMap的查詢效率決定的,也就是說,TreeMap查找value的開銷較大,明顯高於entrySet一次性取出所有key和value的開銷。因此,遍歷TreeMap時強烈推薦使用entrySet方法。
2、只遍歷key時,keySet方法更為合適,因為entrySet將無用的value也給取出來了,浪費了性能和空間。在上述測試結果中,keySet比entrySet方法耗時少24%。
3、只遍歷value時,使用vlaues方法是最佳選擇,entrySet也明顯優於keySet方法。
網路——Map
『貳』 qmap是什麼文件夾可以刪嗎 / 藍訊
你好,找回誤刪並清除了回收站的文檔方法如下 步驟: 1、單擊「開始——運行,然後輸入regedit (打開注冊表) 2、依次:HEKEY——LOCAL——MACHIME/SOFTWARE/microsoft/WINDOWS/ CURRENTVERSION/EXPLORER/DESKTOP/NAMESPACE 在左邊空白外點擊「新建」 ,選擇:「主鍵」,把它命名為「645FFO40——5081——101B——9F08——00AA002F954E」 再把右邊的「默認」的主鍵的鍵值設為「回收站」,然後退出注冊表。就OK啦。 3、要重啟你的計算機。 只要你機器沒有運行過磁碟整理。系統完好.任何時候的文件都可以找回來。
『叄』 安卓qmap是什麼文件夾
你好,Qmap
是
QQ
的地圖文件夾(就是在
QQ
里給好友發送定位時候產生的文件),刪掉不是很影響使用,屬於緩存文件,刪掉後再次載入位置信息會慢一點,但不影響
QQ
發送定位的功能。
『肆』 一些安卓手機不知道是什麼的文件夾,請大神指教下,都是什麼東西哪個能刪除
這好像是手機系統根目錄,storage我知道是內存卡的目錄,裡麵包括自帶內存和插的內存卡,也叫SD卡,sysdata是系統運行程序
『伍』 Android IMS原理解析之processEvent
接著上篇文章 Android IMS原理解析之InputChannel ,上篇文章講到,當有事件到來時,觸發NativeInputEventReceiver的回調接下來會調用到Java層InputEventReceiver的方法,看一下Java層的事件處理:
前面分析到事件已經發送到對應的窗口了,接下來就是事件的處理流程,從onInputEvent()來開始分析:
在onInputEvent()內部會執行enqueueInputEvent(),傳入了this及InputEvent等參數,接下來看一下enqueueInputEvent():
該方法內部執行執行三項工作:
1.通過obtainQueuedInputEvent()來獲取QueuedInputEvent實例,對InputEvent進行封裝,類似Message處理;
2.對mPendingInputEventTail及mPendingInputEventTail進相關的處理,接下來事件處理會用到;
3.由於processImmediately為true,因此執行doProcessInputEvents()進行邏輯處理;
接下來對以上三項工作進行一一分析:
從obtainQueuedInputEvent()可以看到,執行邏輯跟obtainMessage邏輯是一致的,先從pool裡面取,如果沒有的話就重新創建,然後進行賦值,對比messgae的處理邏輯,也有對應的recycle方法:
mQueuedInputEventPool賦值是在recycleQueuedInputEvent()內部,pool Size最大為10,超過後就不處理了。
第二項工作是賦值操作,是為第三項工作做准備的,直接看第三項工作doProcessInputEvents():
在doProcessInputEvents()內部最終執行了deliverInputEvent(q):
在deliverInputEvent()內部會執行InputStage的deliver()方法,stage是在setView()中進行賦值的,此處對應的是ViewPostImeInputStage,一起看一下:
可以看到,在執行deliver()時會執行apply(),然後執行onProcess(),在onProcess()內部來選擇執行processKeyEvent()或processPointerEvent()[ 在其內部將Event傳遞到對應的目標控制項 ,後面進行分析]來對事件進行處理,在處理完後針對不同的返回result來調用finish()-->forward()-->onDeliverToNext()[mNext不null,繼續deliver;為null]-->finishInputEvent()來發送事件結束信息到InputDispatcher進行接下來的處理工作,看一下finishInputEvent()方法實現:
q.mReceiver是在obtainQueuedInputEvent()時傳入的是InputEventReceiver對象,因此調用的是InputEventReceiver的finishInputEvent(),然後執行recycleQueuedInputEvent(q)來回收QueuedInputEvent ,前面已經分析過,邏輯跟Message處理是一致的,此處用的是享元模式;接下來看一下InputEventReceiver的finishInputEvent()方法:
從mSeqMap裡面取出對應的seq,然後執行nativeFinishInputEvent(),mReceiverPtr是在nativeInit時返回的NativeInputEventReceiver對象引用,一起去native層去看一下nativeFinishInputEvent()的具體實現:
調用的是NativeInputEventReceiver的finishInputEvent():
接著通過InputConsumer的sendFinishedSignal()來進行發送:
最終是通過mChannel來進行發送;
前面講到在addView()時執行registerInputChannel()時會在InputDispatcher裡面通過mLooper->addFd(fd, 0, ALOOPER_EVENT_INPUT, handleReceiveCallback, this)注冊了對InputChannel fd的監聽,當有可讀消息時,會回調handleReceiveCallback()方法:
finishDispatchCycleLocked()函數只是將向InputDispatcher發送一個命令。最終處理反饋的函數是(),本文就不詳細介紹了,到此一個事件就算閉環了。
用一張圖來總結一下處理及反饋過程: