loading...
谈谈集合框架
Published in:2022-01-31 | category: Java面试题集合
Words: 814 | Reading time: 2min | reading:

谈谈集合框架

主要提供的数据结构

我们常用的集合有三种:List,Set,Map

List集合

list集合又称有序的Collection。它会会按照对象的存储顺序进行保存,可以对列表中的每个元素的出入和删除元素位置进行精确的控制。同hi是,它可以保存重复对象。

实现List接口的类常见的有三种:ArrayList,LinkedList和Vector

ArrayList和Vector的底层都是数组结构,他们有着查询快,增删慢的特点。两者的区别在于,ArrayList是线程不安全,Vector是线程安全的,因此,ArrayList执行效率比Vector快。但ArrayList在进行扩容时,是在之前的长度上进行1.5倍的扩容,而Vector是在之前的长度上进行2倍扩容。

Linked与他们两个不同,LinkedList的底层是双向链表结构,所以他有着查询慢,增删快的特点。

Set集合

Set集合中的元素不可以重复。因此存入set的每个元素都必须通过equals()方法来确定对象的唯一性。

Set集合有两个实现类,HashSet和TreeSet。这两个实现类都没有get()方法来获取元素,只能通过迭代器方法来获取。

HashSet是无序,不同步,且可以存储空值的。当HashSet中存入一个元素时,HashSet会调用该元素的hashCode()方法来获得该元素的哈希码,然后根据哈希码来决定元素在HashSet中的存储位置。简单的说,HashSet判断两个元素是否相等的标准是,通过对象的equals()方法和hashCode()方法返回值进行判断。如果要把一个对象放入HashSet中,重写该对象的equals方法也必须重写该对象的hashCode()方法。

TreeSet是有序的,不允许存储空值。TreeSet的底层是红黑树结构,它里面的元素是有序的。TreeSet是SortSet的唯一实现类,TreeSet可以确保集合中的元素处于排序状态,支持两种排序方式,自然排序和自定义排序。其中自然排序为默认的排序方式。自定义排序则需要TreeSet中的对象元素实现Comparable接口。

不允许存储空值。HashSet是通过HashMap实现的,,只不过Set用的只是Map的key。Map的key和Set都有一个共同的特性,不允许有null值。TreeMap还多了一个有序性。所以在我们需要对其中元素进行排序的时候才使用TreeSet。

Map集合

Map集合属于双列集合。它提供了一个从键映射到值得数据结构,他用于保存键值对,其中值可以重复,但键不能重复。HashMap常用的实现类有HashMap和TreeMap。

HashMap是一个最常用的Map,他根据键的哈希码存储数据,根据键可以直接获取他的值。HashMap只允许存储一条键为null的记录,但允许多条记录的值为null。HashMap是线程不安全的。如果需要线程安全,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

TreeMap的底层结构是一颗红黑树,使用链式存储,可以指定比较器Comparator,key需实现Comparable接口。key不能为空。

Prev:
面试题精选
Next:
TreeSet集合的自然排序和比较器排序
catalog
catalog