集合其实和数组一样都是java中提供的一种容器,可以用来存储多个数据。
既然集合和数组都容器,那么他们有什么区别呢?
1、数组的长度是固定的,集合的长度是可变的。
2、数组中存储的是同一类型的元素,可以存储基本数据类型值。
3、集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
了解完集合与数组的区别,让我们来看看在JAVA中都为我们提供了哪些集合?
在JAVA中,集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map。Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。同样、Map:键值对集合的根接口,用于存储一系列键值对元素,它也有一些重要的子接口。下面就让我们用一张图来说清楚Collection和Map子接口的特点。
根据JDK1.8中的API总结
看完上图所有子接口的特点后,再让我们仔细讨论一下常用子接口ArrayList和LinkedList以及HashMap和Hashtable的区别:ArrayList和LinkedList都实现了List接口,他们有以下的不同点:ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
HashMap和Hashtable有的区别:
HashMap是非线程安全的,HashTable是线程安全的。
HashMap的键和值都允许有null值存在,而HashTable则不行。
因为线程安全的问题,HashMap效率比HashTable的要高。
Hashtable是同步的,而HashMap不是。
因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
一般现在不建议用HashTable, ①是HashTable是遗留类,内部实现很多没优化和冗余。②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。