Map、List等集合

编程思想是相通的,只是实现方式有所不同。

数据库中,我们常常用索引来找到具体某个值,当然会经常用联合索引。而在开发中,常常会有种情况下载

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实现。

时间: 2024-10-09 18:04:42

Map、List等集合的相关文章

关于List&lt;Map&lt;String,Object&gt;&gt;集合 的按大小排序

今天写项目,突然遇到了一个问题.程序要求我把一个List<Map<String,Object>>集合按大小排序,卧槽,当时我就懵逼了~        经过研究,功夫不负有心人啊,叼叼哒的我肿么把这个排序搞定了,回头发现,代码也是叼叼哒~醉了醉了~        废话不多说,直接上代码://这是你自己用来接受查询出来的数据的集合. List<Map<String,Object>> listMap1 = new LinkedList<Map<Stri

Collection单列集合 Map双列集合

Map集合:该集合存储键值对,一对一对往里存.而且要保证键的唯一性. 1.添加 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2.删除 clear() remove(Object key) 3.判断 containsKey(Object key) containsValue(Object value) isEmpty() 4.获取 get(Object key) :获取值 size() values() entrySet(

对List&lt;Map&lt;String, Object&gt;&gt;集合排序

private void mySort(List<Map<String, Object>> list) { //list为待排序的集合,按SEQ字段排序 Comparator<Map<String, String>> mapComprator = new Comparator<Map<String, String>>() { @Override public int compare(Map<String, String>

list,map,set集合的基本用法及差异

List:1.可以允许重复的对象.  2.可以插入多个null元素. 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序. 4.常用的实现类有 ArrayList.LinkedList 和 Vector.ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适. Set:1.不允许重复对象   2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator  或者 C

迭代器遍历【List、Set、Map】&amp;&amp; 遍历集合的方法总结 &amp;&amp; Collections工具类

整理&&总结 迭代器遍历Iterator[List.Set.Map]example 1 package boom.collection; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.HashSet; 6 import java.util.Iterator; 7 import java.util.List; 8 import java.util.Map; 9 import jav

List containsKey 和Map contains 判断集合中是否包含某个值

map集合 //1.第一种 HashMap map = new HashMap(); map.put("1", "value1"); map.put("2", "value2"); Iterator keys = map.keySet().iterator(); while(keys.hasNext()){ String key = (String)keys.next(); if("2".equals(ke

mybatis传递Map和List集合示例

1.List示例 java文件: dao: public List<ServicePort> selectByIps(List<String> ips); xml文件: <!-- 高级查询 --> <select id="selectByIps" resultType="ServicePort"> Select * from port_service_info where ip in <foreach item=

Map集合遍历的2种方法

Map是一个集合的接口,是key-value相映射的集合接口,集合遍历的话,需要通过Iterator迭代器来进行. Iterator是什么东西: java.util包下的一个接口: 对 collection 进行迭代的迭代器.迭代器取代了 Java Collections Framework 中的 Enumeration.迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素. 方法名称得到了改进 方法摘要  boolean has

黑马程序员——Java基础---集合(二)------Map集合

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Map集合 一.概述 1.简述: Map<K,V>集合是一个接口,和List集合及Set集合不同的是,它是双列集合,并且可以给对象加上名字,即键(Key) 2.特点: 1)该集合存储键值对,一对一对往里存 2)要保证键的唯一性

[原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------