associatedObject又称关联对象。顾名思义,就是把一个对象关联到另外一个对象身上。使两者能够产生联系。
这样我们就可以通过associatedObject在运行时给cagetory添加getter和setter。因为category中添加的property不会生成带下划线"_"的成员变量以及getter和setter的实现。所以可以通过关联对象实现getter和setter。
objc_setAssociatedObject(id object, const void key, id value, objc_AssociationPolicy policy)
参数一:id object : 给哪个对象添加属性,这里要给自己添加属性,用self。
参数二:void == id key : key值,根据key获取关联对象的属性的值,在objc_getAssociatedObject中通过次key获得属性的值并返回。
参数三:id value : 关联的值,也就是set方法传入的值给属性去保存。
参数四:objc_AssociationPolicy policy: 策略,属性以什么形式保存。
objc_getAssociatedObject(id object, const void key);
参数一:id object : 获取哪个对象里面的关联的属性。
参数二:void == id key : 什么属性,与objc_setAssociatedObject中的key相对应,即通过key值取出value。
总结:
关联对象并不存储在被关联对象本身内存中,而是有一个全局统一的 AssociationsManager中
一个实例对象就对应一个ObjectAssociationMap,
而ObjectAssociationMap中存储着多个此实例对象的关联对象的key以及ObjcAssociation,
ObjcAssociation中存储着关联对象的value和policy策略
你可以直接造一个新的RecordID给get这个方法,前提是你必须实现RecordID的equals方法和hashcode方法,用来比较两个对象是否相等,默认的equals方法是比较的地址。所以是不相等,得到的肯定是null。如果你的RecordID对象用Integer或是String等已经从新实现了的equals方法的类型代替,就可以直接new了。
你如果想遍历所有的可以用iterator
也可以直接用foreace循环如下:如果哪里不清楚,请留言
LinkedHashMap <RecordID, Record>lhm=new LinkedHashMap<RecordID, Record>();
for(Record i:mvalues()){
Systemoutprintln(i);
}
你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用MapEntry类,你可以得到在同一时间得到所有的信息。 标准的Map访问方法如下: Set keys = mapkeySet( ); if(keys != null) { Iterator iterator = keysiterator( ); while(iteratorhasNext( )) { Object key = iteratornext( ); Object value = mapget(key); ;… ;} } 然后,这个方法有一个问题。从Map中取得关键字之后,我们必须每次重复返回到Map中取得相对的值,这是很繁琐和费时的。 幸运的是,这里有一个更加简单的途径。Map类提供了一个称为entrySet()的方法,这个方法返回一个MapEntry实例化后的对象集。 接着,MapEntry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更符合逻辑。举例如下: Set entries = mapentrySet( ); if(entries != null) { Iterator iterator = entriesiterator( ); while(iteratorhasNext( )) { MapEntry entry =iteratornext( ); Object key = entrygetKey( ); Object value = entrygetValue(); ;… } } 尽管增加了一行代码,我们却省略了许多对Map不必要的"get"调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。MapEntry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。 Hashtable内部排列的方式是散列排布,所以当输出信息时会是无序的。为了能保证输出的数据按照顺序排列,不要渴望用java自带的函数来对 Hashtable对象进行调整处理。当我们获取Hashtable里的KEY和VALUE时,一般都运行了MapEntry类来转换,好,现在就用这 个类来作文章,我具体写了一个方法。 代码: / 方法名称:getSortedHashtable 参数:Hashtable h 引入被处理的散列表 描述:将引入的hashtableentrySet进行排序,并返回 / public static MapEntry[] getSortedHashtable(Hashtable h){ Set set = hentrySet(); MapEntry[] entries = (MapEntry[])settoArray(new MapEntry[setsize()]); Arrayssort(entries,new Comparator(){ public int compare(Object arg0, Object arg1) { Object key1 = ((MapEntry)arg0)。getKey(); Object key2 = ((MapEntry)arg1)。getKey(); return ((Comparable)key1)。compareTo(key2); } }); return entries; } 调用这个方法: MapEntry[] set = getSortedHashtable(t); //perportyTable for (int i=0;i<setlength;i++){ Systemoutprintln(set[i]getKey()。toString()); Systemoutprintln(set[i]getValue()。toString()); }
以上就是关于关联对象全部的内容,包括:关联对象、Java HashMap get(Object key)的使用方法、如何获得Hashtable中所有key的值和value的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)