Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。
常用的方法:
由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。
public
List是有序、可重复的容器。
有序:List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。
可重复:List允许加入重复的元素。更确切地讲,List通常允许满足 e1.equals(e2) 的元素重复加入容器。
public
LinkedList
LinkedList底层用双向链表实现的存储。
特点:查询效率低,增删效率高,线程不安全。
双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。 所以,从双向链表中的任意一个节点开始,都可以很方便地找到所有节点。
Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”。 比如,indexOf方法就增加了synchronized同步标记。
public
面试题:ArrayList、LinkedList、Vector有什么区别?
ArrayList底层是数组实现的,实现了数组的动态扩容,其查找效率较高,添加删除效率较低,非线程安全
LinkedList底层是采用双向链表进行实现的,查找效率较低,添加删除效率较高,非线程安全
Vector底层和ArrayList底层实现一样,效率较低,但适合在多线程程序中使用,线程安全
Map接口
Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。
Map 接口的实现类有HashMap、TreeMap、HashTable、Properties等。
public
HashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。
HashTable类和HashMap用法几乎一样,底层实现几乎一样,只不过HashTable的方法添加了synchronized关键字确保线程同步检查,效率较低。
HashMap与HashTable的区别
1. HashMap: 线程不安全,效率高。允许key或value为null。
2. HashTable: 线程安全,效率低。不允许key或value为null。
数据结构中由数组和链表来实现对数据的存储,他们各有特点:
数组:占用空间连续。 寻址容易,查询速度快。但是,增加和删除效率非常低。
链表:占用空间不连续。 寻址困难,查询速度慢。但是,增加和删除效率非常高。