“【面试:Java集合】”的版本间差异
跳到导航
跳到搜索
(→List) |
|||
第38行: | 第38行: | ||
=== List 是线程安全的吗?如果要线程安全要怎么做? === | === List 是线程安全的吗?如果要线程安全要怎么做? === | ||
List 中的 Vector 才是线程安全的,其他要实现线程安全使用工具类 | List 中的 Vector 才是线程安全的,其他要实现线程安全使用工具类 '''<span style="color: red">Collections.synchronizedList(new ArrayList())</span>''' 方法。 | ||
=== 怎么给 List 排序? === | === 怎么给 List 排序? === |
2022年4月14日 (四) 00:25的最新版本
List
你知道的 List 都有哪些?
ArrayList、 LinkedList 、 Vector 等。
List 和 Vector 有什么区别?
Vector 是 List 接口下线程安全的集合。
List 是有序的吗?
List是有序的。
ArrayList 和 LinkedList 的区别?分别用在什么场景?
ArrayList 和 LinkedList 数据结构不一样,前者用在查询较多的场合,后者适用于插入较多的场合。
ArrayList 和 LinkedList 的区别?分别用在什么场景?
同:它们两个都是对 List 接口的实现。
异:它们一个是 Array(动态数组)的数据结构,一个是 Link(链表)的数据结构。
- ArrayList 是数组队列,相当于动态数组;LinkedList 为双向链表结构,也可当作堆栈、队列、双端队列。
- 当随机访问 List 时(get和set操作),ArrayList 效率更高。
- (因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找)
- 当对数据进行增加和删除的操作时(add 和 remove 操作),LinkedList 效率更高。
- (因为 ArrayList 是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动)
- 从利用效率来看,ArrayList 自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;
- 而 LinkedList 自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
- ArrayList 主要控件开销在于需要在于 List 列表预留一定空间;而 LinkList 主要控件开销在于需要存储结点信息以及结点指针信息。
场景:
- LinkedList,插入删除快,查找修改慢。 适用于频繁增删的场景。
- ArrayList,查找快,插入删除慢。 适用于频繁查找和修改的场景。
ArrayList 和 LinkedList 的底层数据结构是什么?
ArrayList 使用的是数组结构, LinkedList 使用的是链表结构。
ArrayList 默认大小是多少,是如何扩容的?
Jdk1.7 之前 ArrayList 默认大小是 10, JDK1.7 之后是 0,JDK 差异,每次约按 1.5 倍扩容。
List 是线程安全的吗?如果要线程安全要怎么做?
List 中的 Vector 才是线程安全的,其他要实现线程安全使用工具类 Collections.synchronizedList(new ArrayList()) 方法。
怎么给 List 排序?
使用 List 自身的 sort 方法,或者使用 Collections.sort(list) 方法。
List 如何排序?
三种方法:
- 使用 Collections.sort 默认正序,可以传第二个参数自定义排序;
- 自定义 bean 实现 Comparable 接口;
- 实现 Comparator 接口自定义比较器;
Arrays.asList 方法后的 List 可以扩容吗?
Arrays.asList 使用的是 final 数组,并且不支持 add 方法,不支持扩容。
List 和 Array 之间如何互相转换?
- List -> Array:使用 toArray 方法;
- Array -> List:使用 Arrays.asList(array) 方法,由于它是固定的,不固定的可以使用 new ArrayList(Arrays.asList(array)) 。
List 如何去重?[1]
五种方法:
- 使用:“LinkedHashSet”;
- 使用:“stream”(java8新特性);
- 使用:“HashSet”;
- 使用:“List.contains”方法;
- 使用:双重for循环;
Map
Collection集合接口和Map接口有什么关系?
没有直接关系,但是一些子类会有依赖。 Collection 是最基本的集合接口,声明了适用于 JAVA 集合(只包括 Set 和 List)的通用方法。 Map 接口并不是 Collection 接口的子接口,但是它仍然被看作是 Collection 框架的一部分。
你都知道哪些常用的 Map 集合?
HashMap、HashTable、TreeMap、LinkedHashMap