集合

/ Java / 没有评论 / 372浏览

在Java中我们在日常开发时使用最频繁的除了基本数据类型外,就属集合类莫属了。在Java中集合类有很多,但比较常用的就是那么几个,但你千万不要小瞧这几个集合类,它们基本能够满足我们开发的所有需求。虽然数量较少,但它们底层的数据结构和数据类型都有很大的不同,正是因为有这些不同,才导致我们在使用时,必须根据不同的业务来选择最适合的集合类,这里的最适合可以是基于性能考虑的,也可能基于安全问题考虑的,总之,要想更好的使用集合类,我们必须要详细掌握不同集合类的底层实现和不同集合类之间的优缺点。

b3fb43166d224f4a5cebf37901f790529822d16e.jpg

上面的图片详细展示了Java中的所有集合类的层级关系,看上去虽然比较复杂比较多,但我们可以看出其实集合类一共可以分为两大部分。一大部分集合类都是实现Collection接口的,另一部分集合类都是实现Map接口。可见这两个接口的底层实现方式和数据结构是不同的,所以这两个接口的子接口和实现类一定在处理数据时会有很大的不同。下面我们列出这两大接口主要的子接口及实现类,并简单了解一下它们之间的差异。

-List
--LinkedList
--ArrayList
--Vector
--Stack
-Set
--HashSet
--TreeSet

我们看到Collection接口中主要包括两个接口List和Set,既然是两个不同的接口,那结果可想而知,它们底层的实现方式也是不同的。下面我们简单的了解一下。

List接口:List接口的子接口或实现类都是有序的,也就是元素的插入顺序和访问顺序是一致的,并且List接口可以允许插入相同的元素。

Set接口:Set接口与List接口的区别是 ,不一定保证元素的插入顺序,也就是说元素的插入顺序和访问顺序不一定是一致的,并且Set接口中不允许插入相同的元素。

-Map
--HashMap
--TreeMap
--Hashtable

Map接口和List接口与Set接口不一样,Map接口没有继承Collection接口,也就是Map接口和Collection接口是两个独立的接口,它们之间没有任何关系,并且Map接口插入元素的方式也和Collection接口有很大的不同,Map接口插入元素时必须提供一个key和一个value。并且Map接口中的key必须保证是唯一的,也就是说Map接口中不能存储相同的key,在访问时我们就是通过这个唯一的key来获取到它对应的value。

在Map接口中主要有3个实现类,它们和Collection接口的实现类一样,不同的实现类,因为底层实现方式和数据结构不同,它们都有很大的差异的,具体的差异本人将会在后面的文章中详细讲解。

上面我们已经介绍完了,Java中大部分比较常用的集合接口以及实现类,那么在后续的文章中,本人将不定期的更新上述集合实现类的底层实现以及使用技巧,如有输写错误或考虑不周情况时,欢迎指出,谢谢。