Collection

Map接口 :映射,(key和value的方式存储)键映射到值的对象。接口Map<K,V> 

k:此映射所维护的键的类型

v:映射值的类型

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

Collection<E>接口  

所有超级接口:Iterable<E>返回一个在一组T类型的元素上进行迭代的迭代器。

何为迭代器:可以被next()函数调用并不断返回下一值的对象称为迭代器。
·List:有序的 collection(也称为序列),允许含有重复元素。
  1.ArrayList:List 接口的大小可变数组的实现,此实现不是同步的
底层的数据结构是数组Array[]
快速查询,插入删除效率慢

构造方法摘要
ArrayList()
          构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extendsE> c)
          构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
          构造一个具有指定初始容量的空列表。

  2.LinkedList(): List 接口的链接列表实现, 此实现不是同步的
链表:  插入删除效率快

构造方法摘要
LinkedList()
          构造一个空列表。
LinkedList(Collection<? extendsE> c)
          构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。

  3.Vector (区别于ArrayList是线程安全,只允许一个线程进入): Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是, Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。
底层结构为数组Array[]  

构造方法摘要
Vector()
          构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
Vector(Collection<? extendsE> c)
          构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。
Vector(int initialCapacity)
          使用指定的初始容量和等于零的容量增量构造一个空向量。
Vector(int initialCapacity, int capacityIncrement)
          使用指定的初始容量和容量增量构造一个空的向量。

·Set:一组不包含重复元素的collection。也就是说equals()方法不适用于set内的元素对,在这里equals()方法比较 的是两个set集合是否相等(包括set的大小,set的所有成员),相等则返回true。

 set 的hashcode: set 中所有元素的hashcode总和,其中null 元素的哈希码定义为零。
  
·Map
·HashMap :(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)

基于哈希表的 Map 接口的实现:两个方法api:put(key,value) & get(key)
   实现方式:数组+链表  
新版本:数组+链表+树
key通常使用基本数据类型以降低碰撞
用key的hashcode用取余操作设置索引
hashcode碰撞时进行equals操作  equals相同时覆盖,不同时放入链表
Java7版本优化  链表层级达到8(可设置)时,链表升级为树(减少Hashcode碰撞)
·HashTable :(与HashMap没有本质区别,只区别于线程安全)此类实现一个哈希表,该哈希表将键映射到相应的值。任何非null 对象都可以用作键或值。
·ConcurrentHashMap:

支持获取的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable 相同的功能规范,并且包括对应于 Hashtable 的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但获取操作 必锁定,并且 支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与Hashtable 进行互操作,这取决于其线程安全,而与其同步细节无关。 

此类与 Hashtable 相似,但与 HashMap 不同,它 允许将 null 用作键或值。 


equals

boolean equals(Object o)
比较此 collection 与指定对象是否相等。

Collection 接口没有对 Object.equals 的常规协定添加任何约定时,“直接”实现该 Collection 接口(换句话说,创建一个Collection,但它不是 SetList 的类)的程序员选择重写 Object.equals 方法时必须小心。没必要这样做,最简单的方案是依靠Object 的实现,然而实现者可能希望实现“值比较”,而不是默认的“引用比较”。(ListSet 接口要求进行这样的值比较。)

Object.equals 方法的常规协定声称相等必须是对称的(换句话说,当且仅当存在 b.equals(a) 时,才存在a.equals(b))。List.equalsSet.equals 的协定声称列表只能与列表相等,set 只能与 set 相等。因此,对于一个既不实现List 又不实现 Set 接口的 collection 类,当将此 collection 与任何列表或 set 进行比较时,常规的equals 方法必须返回 false。(按照相同的逻辑,不可能编写一个同时正确实现 SetList 接口的类。)

hashCode

int hashCode()
返回此 collection 的哈希码值。当 Collection 接口没有为 Object.hashCode 方法的常规协定添加任何约束时,为了满足 Object.hashCode 方法的常规协定,程序员应该注意任何重写 Object.equals 方法的类必须重写 Object.hashCode 方法。需要特别指出的是, c1.equals(c2) 暗示着 c1.hashCode()==c2.hashCode()。 
这也意味着两个值相等必须要求equals()和hashCode()均为true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值