码迷,mamicode.com
首页 > 其他好文 > 详细

Map、List等集合

时间:2016-12-28 13:04:03      阅读:178      评论:0      收藏:0      [点我收藏+]

标签: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实现。


Map、List等集合

标签:java   springmvc   mybatis   spring   shiro   

原文地址:http://12465640.blog.51cto.com/12455640/1886758

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!