集合探析

(一)Java 集合体系结构(List、Set、Collection、Map 的区别和联系)

1、Collection 接口存储一组不唯一,无序的对象
2、List 接口存储一组不唯一,有序(插入顺序)的对象
3、Set 接口存储一组唯一,无序的对象
4、Map 接口存储一组键值对象,提供 key 到 value 的映射。Key 无序,唯一。value 不要求有序,允许重复。(如果只使用 key 存储,而不使用value,那就是 Set)

(二)Vector 和ArrayList 的区别和联系
相同点:
1)实现原理相同—底层都使用数组
2)功能相同—实现增删改查等操作的方法相似
3)都是长度可变的数组结构,很多情况下可以互用
不同点:
1)Vector 是早期 JDK 版本提供,ArrayList 是新版本替代 Vector 的2)Vector 线程安全,ArrayList 重速度轻安全,线程非安全
长度需增长时,Vector 默认增长一倍,ArrayList 增长 50%

(三)ArrayList 和LinkedList 的区别和联系
相同点:
两者都实现了 List 接口,都具有 List 中元素有序、不唯一的特点。
不同点:
ArrayList 实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素的效率比较高;
LinkedList 采用链表存储方式。插入、删除元素时效率比较高

(四)HashMap 和Hashtable 的区别和联系
相同点:
实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用
不同点:
1、Hashtable 是早期提供的接口,HashMap 是新版 JDK 提供的接口2、Hashtable 继承 Dictionary 类,HashMap 实现 Map 接口
3、Hashtable 线程安全,HashMap 线程非安全
4、Hashtable 不允许 null 值,HashMap 允许 null 值

(五)HashSet 的使用和原理(hashCode()和equals())
1)哈希表的查询速度特别快,时间复杂度为 O(1)。
2)HashMap、Hashtable、HashSet 这些集合采用的是哈希表结构,需要用到 hashCode 哈希码,hashCode 是一个整数值。
3)系统类已经覆盖了 hashCode 方法 自定义类如果要放入 hash 类集合, 必须重写 hashcode。如果不重写,调用的是 Object 的 hashcode,而Object 的 hashCode 实际上是地址。
4)向哈希表中添加数据的原理:当向集合 Set 中增加对象时,首先集合计算要增加对象的 hashCode 码,根据该值来得到一个位置用来存放当前对象,如在该位置没有一个对象存在的话,那么集合 Set 认为该对象在集合中不存在,直接增加进去。如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象进行 equals 方法比较,
如果该 equals 方法返回 false,那么集合认为集合中不存在该对象,在进行一次散列,将该对象放到散列后计算出的新地址里。如果 equals 方法返回 true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了。
5)在哈希表中判断两个元素是否重复要使用到 hashCode()和 equals()。hashCode 决定数据在表中的存储位置,而 equals 判断是否存在相同数据。
6) Y=K(X) :K 是函数,X 是哈希码,Y 是地址

(六)TreeSet 的原理和使用(Comparable 和comparator)
1)TreeSet 集合,元素不允许重复且有序(自然顺序)
2)TreeSet 采用树结构存储数据,存入元素时需要和树中元素进行对比, 需要指定比较策略。
3)可以通过 Comparable(外部比较器)和 Comparator(内部比较器)来指定比较策略,实现了 Comparable 的系统类可以顺利存入 TreeSet。自定义类可以实现 Comparable 接口来指定比较策略。
4)可创建 Comparator 接口实现类来指定比较策略,并通过 TreeSet 构造方法参数传入。这种方式尤其对系统类非常适用。

(七)集合和数组的比较(为什么引入集合)
数组不是面向对象的,存在明显的缺陷,集合完全弥补了数组的一些缺点,比数组更灵活更实用,可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。具体如下:
1)数组的效率高于集合类.
2)数组能存放基本数据类型和对象,而集合类中只能放对象。
3)数组容量固定且无法动态改变,集合类容量动态改变。
4)数组无法判断其中实际存有多少元素,length 只告诉了 array 的容量。
5)集合有多种实现方式和不同的适用场合,而不像数组仅采用顺序表方式。
6)集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。

(八)Collection 和Collections 的区别
1)Collection 是 Java 提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口 List 和 Set。
2)Java 中还有一个 Collections 类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值