java常用类——集合

集合接口以及常用实现类:

collection和Map区别:

    Collection是最基本的集合接口,存储的是Object。JDK不提供直接继承Collection的类,提供了Collection的子接口List和Set。

    Map是以key-value的形式来存储的,可看成是key集合,或Value集合,或key-value集合,key不可重复。Map常用的实现类主要是HashMap、HashTable、TreeMap、LinkedHashMap。


List和Set区别:

    List和Set都继承了Collection接口。

    List中的元素是有序的,可以重复。

    Set中的元素是无序的,不可以重复。


List和数组的区别:

    数组维数是固定的,赋值不允许超过数组定义的大小。

    List会随着元素的增减自动为每个元素确定一个相应的位置。


List的常用实现类主要是

    ArrayList

    LinkedList

    Vector


ArrayList和LinkedList区别:

    ArrayList是以数组方式实现的,可以使用索引的方式来快速定位对象,因此,在读取操作上使用ArrayList效率较高。对于插入和删除操作,需要移动后端的数组元素,从而重新调整索引顺序,调整索引顺序会消耗一定时间,ArrayList不适于插入删除操作。

    LinkedList是以链表方式实现的,对于插入和删除操作,只要改变前后对象的引用即可,因此,在插入和删除操作上,LinkedList效率较高。对于读取操作,需要遍历节点来定位元素,效率较低。

    因此,当需要频繁随机访问数据时,采用ArrayList。当需要频繁操作其中的数据而不用随机访问时,采用LinkedList。


ArrayList和Vector区别:

    Vector是线程安全的,当一个Iterator被创建而且正在被使用时,另一线程改变了Vector的状态,这时Iterator的方法将抛出异常。

    ArrayList/LinkedList是非线程安全的。

    ArrayList和Vector实现机制相似,都是使用数组来控制对象。二者初始化长度都为10。当增加的数据超过10时,Vector缺省情况下自动增长原来一倍的数组长度。ArrayList增长原来的50%的长度。如果要保存大量的数据,那么,使用Vector比较好一些,因为可以通过设置集合的初始化大小来避免不必要的资源开销。【见最下长度增长图片】


HashMap和HashTable区别:

    二者比较类似,HashMap是非线程安全的。HashTable是线程安全的。

   

关于是否同步的选择:

    如果程序在单线程环境中,或者访问仅仅在单线程中进行,考虑非线程安全的类,这样效率较高。如果多个线程可能同时操作一个类,就应该使用线程安全的集合类。

你可能感兴趣的:(java常用类——集合)