Re: [问题] 想请问Hashtable<Key,Values>的问题

楼主: swpoker (swpoker)   2015-12-11 10:48:44
采用 hook 的方式如何?
如果范围没有太大那就直接用继承
如果万一怕会变动太大那就用桥接
我这里用继承
以下我是只判别是否为连续
public class MyHashtable extends Hashtable{
Map<Object,Integer> _count = new HashMap();
//这里要改写!!!
boolean checkequal(Object v1,Object v2){
return v1.equals(v2);
}
boolean count(Object key, Object value){
//1.String key = String.format("%s.%s", _key,value);
//2.
if( this.containsKey(key)==false
|| checkequal(this.get(key),value) ==false
){
_count.put(key, 0);
}
//count
//_count.put(key, _count.containsKey(key) ? _count.get(key) + 1 : 1) ;
_count.put(key, _count.get(key) + 1);
System.out.printf("%s:%s\n",key,_count.get(key));
//trigger 这边可以决定要不要采用listener模式
if(_count.get(key) == 10){
//do something
//return false?
//clean ?
//_count.remove(key);
}
return true;
}
@Override
public synchronized Object put(Object key, Object value) {
//这边要自己决定hook的先后顺序,并且决定是否中断?
//before or after ?
boolean ck = count( key, value) ;
//if stop
//if(ck == false){return:}
return super.put(key, value);
}
}
※ 引述《freedom74569 (莫急莫慌莫害怕)》之铭言:
: 发出求救信号~
: 我有一个Hashtable<Key,Values>
: 里面的Values一直更新
: 想要判断Values连续10次相同就remove掉这个device的array
: 我有写出大概意思的code不过不知道怎么下手,因我的mRssi会一直更新
: public ArrayList<BluetoothDevice> mLeDevices = new ArrayList<BluetoothDevice>();
: public ArrayList<byte[]> mRecords = new ArrayList<byte[]>();
: public Hashtable<String, Integer> mRssi = new Hashtable<>();
: public void addDevice(BluetoothDevice device, int rssi, byte[] scanRecord) {
: if (!mLeDevices.contains(device)) {
: mLeDevices.add(device);
: mRecords.add(scanRecord);
: }
: mRssi.put(device.getAddress(), rssi);
: /** 以下为意识code */
: ArrayList<Integer> rssiArrayList = new ArrayList<Integer>(mRssi.values());
: int lastNum = rssiArrayList.get();
: int count = 0;
: /** 从头开始loop */
: for (int i = 0; i < rssiArrayList.size(); i++) {
: /** 如果当前值等于最后值 */
: if(rssiArrayList[i]==lastNum){
: count++;
: if(count>=10){
: /** 如果连续10次rssi相同就移除 */
: mLeDevices.remove();
: }
: }
: /** 如果不相等的话 */
: else {
: lastNum=rssiArrayList[i];
: count = 1;
: }
: }
: Log.e("mRssi", String.valueOf(mRssi));
: }
作者: adrianshum (Alien)   2015-12-12 17:25:00
这年头还有人用Hashtable?! 另,用inheritance 加入这类功能不太合适吧。这一个小class 存value+count 甚至用另一个 map 存count 就好了

Links booklink

Contact Us: admin [ a t ] ucptt.com