苏州网站建设教程,电子商务网站开发实训,php图片展示网站,做pc端网站要多少钱提出问题#xff1a; 在写一个dao的时候#xff0c;我的需求是这个dao是一个万能的#xff0c;目前的方法只有一个查询出实体类对应的表中所有的数据#xff0c;通过传入的对象#xff0c;利用反射获取实体类中的属性名#xff0c;属性类型#xff0c;利用字符串拼接获取… 提出问题 在写一个dao的时候我的需求是这个dao是一个万能的目前的方法只有一个查询出实体类对应的表中所有的数据通过传入的对象利用反射获取实体类中的属性名属性类型利用字符串拼接获取相应属性对应的set方法利用Method中的invoke方法执行set方法。由于实体类是通过表生成的所以表中的字段和实体类中属性的顺序是一致的每次通过反射依次获取到属性名通过结果集get出来当到这里的时候遇到了一个问题一开始想的是通过反射过去的属性名和属性类型是一一对应的通过键值对的结构存储不是更好吗属性名作为键因为不可能有重复的属性名属性类型作为值放入map集合中。但是遇到了问题从数据库中查询的结果集中获取结果的时候需要知道每个字段的顺序这样getString1或者getInt2……才可以因为通过反射已经获取到了属性类型所以加一个判断就可以选择出使用哪一个get方法是getString还是getInt。由于map集合时无序的我们接触到最多的集合中只有List集合时有序的但是不能存储键值对实体类中的属性顺序是和表中的字段顺序对应的我们可以利用这个解决这个问题通过查了查发现有一种mapLinkedHashMap集合时有序的可以做到按照用户放入集合的顺序取出集合中的元素上面遇到的问题就解决了。 LinkedHashMap介绍 简单的介绍一下。通过LinkedHashMap这个名字可以看出来这是个链表和哈希表的结合链表是有顺序的哈希表通常说是散列表通过计算键的哈希值用这个哈希值映射到表结构中LinkedHashMap允许存储null值基本的和HashMap一致通过键找到值键不可以重复值可以重复。下图是LinkedHashMap的继承关系继承于HashMap所以基本的方法都是一致的。 LinkedHashMap的实现 底层和HashMap一致用哈希表实现区别是LinkedHashMap还使用了一个双向链表实现顺序存取这个双向链表的实现依赖于Entry这个内部类这个Entry内部类在集合中非常常见。通过查看Entry类中的方法实现也可以看出 在删除和增加时都在修改前面的引用和后面的引用。 在HashMap中只是利用了哈希表而LinkedHashMap中还用到了链表记录顺序在LinkedHashMap中并没有put方法而是利用了HashMap中的put方法但是重写了put方法中调用的的addEntry方法 通过上面方法的分析可以看出在添加节点的时候由于是双向链表都会在尾部进行添加。 转载于:https://www.cnblogs.com/duzhentong/p/7816531.html