- List的三个子类的特点
ArrayList底层结构是数组,查询快,增删慢。
LinkedList底层结构是链表型,增删快,查询慢。
Vector底层结构是数组,线程安全,增删慢,查询慢。
- List、Map、Set的区别
List和Set是存储单例数据的集合,Map是存储键和值这样的双列数据的集合;List中存储的数据是有顺序并允许重复的;Map中存储的数据是没有顺序且键值是不允许重复的;Set中的存储数据是没有顺序且不允许重复的,但元素在集合中的位置由元素的hashcode决定,位置是固定的(Set集合根据hashcode来进行数据存储,所以位置是固定的,但是位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的);
- List、Map、Set的实现类
List接口有三个实现类:
LinkedList:基于链表实现(散乱,不稳定),增删快,查询慢;ArrayList:基于数组实现,非线程安全,增删慢,查询快;Vector:基于数组实现,线程安全,增删慢,查询慢;
Map接口有四个实现类:
HashMap:基于hash表实现,非线程安全,支持键值都为null;HashTable:基于hash表实现,线程安全,不支持键null和null值;
LinkedHashMap:是HashMap的一个子类,有序的;
TreeMap:基于红黑树实现,默认是键值的升序排序;
Set接口有三个实现类:
HashSet:底层是由HashMap实现,不允许重复,使用该方式需要重写hashcode和equals方法;
LinkedHashSet:是HashSet的一个子类,底层由LinkedHashMap实现;
TreeSet:底层是由TreeMap实现,基于红黑树实现,默认是值的升序排序;
- List、Map、Set的存储区别
List集合中对象按照索引位置排序,可以有重复对象,运行按照对象在集合中的素偶姻位置索引对象,例如通过list.get(i)方法来获取集合中的元素;Map中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;Set集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合集合中的对象按照特定的方式排序,例如TreeSet类,可以按照默认顺序,也可以通过实现Java.util.Comparator<Type>接口来自定义排序方式。
- 数组和链表的区别
数组是将元素在内存中连续存储的;它的优点:因为数据是连续存储的,内存地址连续,所以在查找数据的时候效率比较高;它的缺点:在存储之前,我们需要申请一块连续的内存空间,并且在编译的时候就必须确定好它的空间的大小。在运行的时候空间的大小是无法随着你的需要进行增加和减少而改变的,当数据量比较大的时候,可能会出现越界的情况,数据量比较小的时候,又有可能会浪费掉内存空间。在改变数据个数时,增加、删除数据效率比较低。
链表是动态申请内存空间,不需要像数组需要提前申请好内存的大小,链表只需在用的时候申请就可以,根据需要来动态申请或删除内存空间,对于数据增加和删除比较灵活。还有就是链表中数据在内存中可以再任意的位置,通过应用来关联数据。
参照来源于《黑马程序员面试宝典(java)》