Collection分支:
set接口:元素无顺序,但是不可重复,可以存放不同的类型的对象,除了collection外,多了一个clear方法
HashSet:实现set结构的类,Set set=new HashSet(),add(),remove()方法
TreeSet类:实现SortedSet(set子接口)接口,不能重复,数据类型一样
List接口:有顺序的,add和remove多了重载方法:add(插入位置int,插入对象),remove同,位置编号从0开始;get,取值;indexOf,得到对象位置;set方法,修改某个位置的数据,同add方法,只是他会把旧位置上的对象返回
LinkedList和ArrayList实现List接口,LinkedList和ArrayList的区别,LinkedList插入速度快,ArrayList查询速度快
Iterator接口:读取collection对象中的数据
Collection有个iterator方法,生成iterator对象,next(),hasNext(),remove()(remove方法会删除掉next取得的数据,注意,不光是删掉iterator中的对象,原来collection中的对象也被删除掉了,所以iterator和生成它的对象是连在一起的,所以不管市collection和iterator对象哪个被修改,另外一个也被修改)
ListIterator接口:除了可以往后读取,还可以往前读取。生成ListIterator的方法是listIterator.只有LinkedList和ArrayList两个类有这个方法,next(),previous(),hasNext(),hasPrevious(),remove(),add(),set(),(注:remove,set,add方法都是以现在所指定的数据位置为修改的位置,不能任意指定其他位置),previousIndex,nextIndex,获得前一个或者后一个的位置,返回int类型
Map分支:
key value,put(关键值,数据),必须都是对象类型;remove()参数是关键值,返回的是数据,putAll(Map t),putAll除了执行put()迭代操作还需要迭代所传递的Map元素,putAll会自动调整Map的大小。
所有键值对-entrySet(),返回Set对象,其中每个对象都是Map.Entry对象;所有键--keySet(),返回Set对象,删除set的元素同时删除map中对应的映射;所有值--values(),返回Collection对象,删除方面同前
实现Map接口的类,三种:
通用Map:用于在应用程序中管理映射,通常在java.utils程序报中实现
HashMap,HashTable,Properties,LinkedHashMap,IdentityHashMap,TreeMap,WeakHashMap,ConcurrendHashMap
专用Map:通常不必亲自创建此类Map,而是通过某些其他类对其进行访问
Java.util.jar.Attributes,javax.print.attribute.standard.PrinterStateReasons
Java.security.Provider,java.awt.RenderingHints,javax.swing.UIDefaults
用户帮助实现自己的Map类的抽象类
AbstractMap
哈希映射:由一个存储元素的内部数组组成,由于内部采用数组存储,因此必然存在一个访问数组的索引机制,实际上,该机制需要一格小于数组大小的整数索引值,该机制称作 哈希函数,在java基于哈希德Map中,哈希函数将对象转换为一个适合内部数组的整数。
Int hasvalue=(key.hashCode()&0x7fffffff)%table.length
不同的键位映射到相同的位置的冲突的处理:在索引位置插入一个链接列表,并简单的将元素添加到此链接列表。
public Object put(Object key, Object value) {
//我们的内部数组是一个 Entry 对象数组
//Entry[] table;
//获取哈希码,并映射到一个索引
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % table.length;
//循环遍历位于 table[index] 处的链接列表,以查明
//我们是否拥有此键项 — 如果拥有,则覆盖它
for (Entry e = table[index] ; e != null ; e = e.next) {
//必须检查键是否相等,原因是不同的键对象
//可能拥有相同的哈希
if ((e.hash == hash) && e.key.equals(key)) {
//这是相同键,覆盖该值
//并从该方法返回 old 值
Object old = e.value;
e.value = value;
return old;
}
}
//仍然在此处,因此它是一个新键,只需添加一个新 Entry
//Entry 对象包含 key 对象、 value 对象、一个整型的 hash、
//和一个指向列表中的下一个 Entry 的 next Entry
//创建一个指向上一个列表开头的新 Entry,
//并将此新 Entry 插入表中
Entry e = new Entry(hash, key, value, table[index]);
table[index] = e;
return null;
}
map大小调整:
内部数组中的每个位置称作bucket,而可用的bucket数(即内部数组的大小)称作capacity,如果将Map调整的足够大可以减少重新调整大小。
负载因子:为确定合适调整大小,而不是对每个bucket中的链接列表的深度进行计数,基于哈希的Map使用一个额外参数并粗略计算bucket的密度。
负载因子,项数(map大小)与容量之间的关系:
如果(负载因子)*(容量)〉map大小,则调整Map大小
将所有的Map变量生命为Map可简化操作
分享到:
相关推荐
集合框架包含collection和map的子类。其中collection包含list、set和queue。map包括hashmap、hashtable和treemap
这是对集合的总结,可以帮助我们对集合更深入更清晰的认识。
Collection、Map、List、Set、Iterator
java Collection&Map
Collection,List,Set和_Map用法和区别
Java容器有两种基本类型Collection 和 Map
Java Map 集合类简介,Collection,Map,ArrayList
Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别2008-03-30 13:27 这几天这个论坛还处在各个方法的设计阶段,也写了一部分,现在又遇到了这样的问题,怎么保存大量对象。。。的,查了...
下面小编就为大家带来一篇浅谈Java中常用数据结构的实现类 Collection和Map。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
前几天学习了collection的文档,里面主要是collection的基础知识,大神们自动忽略吧
Multi-map Generic Collection Class in C# - A Dictionary Collection Class that can Store Duplicate Key-value Pairs
Java集合Collection、List、Set、Map使用详解
关于Map,List,collection集合遍历,泛型等
通过一段时间的学习,涵盖了集合的主要内容,在学习中记录下典型的例子,以供以后参考
NULL 博文链接:https://javazeke.iteye.com/blog/487275
Java集合排序及java集合类详解(Collection、List、Map、Set).doc
Java集合Collection、List、Set、Map使用详解
Java集合排序及java集合类详解 (Collection, List, Set, Map)
CollectionType是一个库,为Collection和Map提供了它们的子类型,这些子类型正在检查PHP的数据集类型。 要求 PHP 5.5.0或更高版本 安装 CollectionType正式仅支持通过Composer进行安装。 有关Composer文档,请参阅 ...