Java集合 高频面试题,java高级教程gradle从入门到精通

本文详细介绍了Java集合框架中的ArrayList、LinkedList、HashSet、HashMap及其各自的实现类,包括它们的特点、用途、扩容机制以及面试中常见的问题。在ArrayList中,讨论了扩容策略,而在HashMap中,特别提到了JDK1.8后的红黑树优化。文章还对比了ArrayList和LinkedList、HashMap和Hashtable的异同,强调了线程安全和效率的权衡。此外,还给出了集合选用的策略,帮助开发者根据需求选择合适的集合类。
摘要由CSDN通过智能技术生成
  1. 数组存储的数据是有序的、可以重复的。 存储数据的特点单一;

当然,上述有些特点也可以被当作优点,然而在实际操作中,由于数组的不够灵活,所以我们需要其它的方式来存储数据,Java 集合类就这样应运而生了。

Java 集合类中有可以用于存储数量不确定的多个对象的集合(Collection 接口),还有可用于保存具有映射关系的关联数组的集合(Map 接口)。


  • Collection 接口:单列数据,用于存储数量不确定的多个对象 ;

  • List接口:元素有序、可重复的集合(对应“动态”数组),即集合中的每个元素都有其对应的顺序索引,可以根据序号存取容器中的元素。

  • ArrayList 实现类:作为 List 接口的主要实现类,它是线程不安全的,但效率高;适⽤于频繁的查找⼯作。

  • LinkedList 实现类:使用 LinkedList 实现类对于频繁的插入、删除操作的效率比 ArrayList 高;

  • Vector 实现类:作为 List 接口的古老实现类,它是线程安全的,但效率低;

  • Set 接口:元素无序、不可重复的集合(对应高中讲的“集合”)

  • HashSet 实现类:作为 Set 接口的主要实现类,是线程不安全的;可以存储 null 值。

  • LinkedHashSet 实现类:是 HashSet 的子类。遍历其内部数据时,可以按照添加的顺序遍历,使其看起来是有序的。

  • TreeSet 实现类:底层使⽤红⿊树,TreeSet可以确保集合元素处于排序状态;排序方法分为自然排序和定制排序,自然排序指的是根据自然规律排序,比如数字的话就按照从小到大排序,定制排序指的是根据自己既定的规则进行排序。

  • Map 接口:双列数据,保存具有映射关系 “key-value对” 的集合

  • HashMap 实现类:作为Map的主要实现类,它是线程不安全的,但效率高。可以存储 null 值的 key 和 value。

  • LinkedHashMap 实现类:保证在遍历 map 元素时,可以按照添加的顺序实现遍历。

  • ConcurrentHashMap 实现类:线程安全的 Map;

  • TreeMap 实现类:底层使用红黑树,保证按照添加的 key-value 对进行排序,实现排序遍历。

  • Hashtable 实现类:古老的实现类,它是线程安全的,但效率低;不能存储 null 的 key 和 value。

  • Properties 实现类:常用来处理配置文件,key 和 value 都是 String 类型。

Java中的 List、Set、Map 之类的集合容器中只能存放引用类型,而不能存放类似于 int、double 之类的基本类型。

参考文献:【传送门

2 如何选用集合

===========================================================================

如果我们需要根据键值获取元素值就选用 Map 接口下的集合,当需要排序时就选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap;

如果我们只需要存放元素时,就选择实现 Collection 接口的集合,此时如果需要保证元素唯一就选择实现 Set 接口的集合,如 TreeSet 或者 Has

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值