标签:java springmvc mybatis spring shiro
编程思想是相通的,只是实现方式有所不同。
数据库中,我们常常用索引来找到具体某个值,当然会经常用联合索引。而在开发中,常常会有种情况下载:
Map中放对应对象,而每个对象又包含集合,比如Map<Integer, School> schoolId2SchoolMap,每个School中又包含多个班级Map<Integer, Grade> gradeId2GradeMap。
需求:取某个学校的某个班级的详细信息?
以前:1)获取学校对象;2)获取班级信息
为何不多新建一个Map<GradeKey, Grade>呢,其中GradeKey类成员变量为schoolId和gradeId,重写hashCode()和equal()即可。eclipse有快捷键。
现在:1)直接从Map<GradeKey, Grade>获得。
再来看看Map、List、Set等集合的实现:
一、Map,以hashMap为例下载 ,
1)初始化为长度16的数组,数组每个元素为一个链表对象。
2)当新建链表元素个数超过threshold,数组长度就扩展2倍。
3)当put时候,用if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 来判断是否(Object) key相等。
int threshold = (int)Math.min(capacity(16) * loadFactor(0.75f), MAXIMUM_CAPACITY(1 << 30) + 1);
二、List,以ArrayList为例下载,
1)初始化为长度10的数组,数组每个元素为一个Object。
2)当新添加对象的坐标index大于数据长度,就扩展增加当前数组1/2的长度。
3)当add时候,已有对象的size++,超过数组长度就扩展,当调用set(int index, E element)方法时,传值大于新添加对象的坐标时会报错。
三、Set,以hashSet为例,
1)其实用一个HashMap成员变量来实现,所以特性和hashMap基本一致。
而其他Set实现类等也是如此,比如TreeSet用TreeMap实现。
标签:java springmvc mybatis spring shiro
原文地址:http://12465640.blog.51cto.com/12455640/1886758