【Java面试】Java基础-集合相关知识点(1)


容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。

1. 集合有哪些类?

集合是一组相关对象的容器,用于存储、操作和处理数据。Java集合框架提供了一组接口和实现类来表示不同类型的集合。以下是Java集合框架中常见的集合类:

  • List
    List是一个有序的集合,可以包含重复的元素。Java提供了多个实现List接口的类,如ArrayList、LinkedList、Vector等。

  • Set
    Set是一个不允许重复元素的集合,元素没有固定的顺序。Java提供了多个实现Set接口的类,如HashSet、TreeSet、LinkedHashSet等。

  • Queue
    Queue是一个队列,支持先进先出(FIFO)的操作。Java提供了多个实现Queue接口的类,如ArrayDeque、LinkedList、PriorityQueue等。

  • Map
    Map是一个键值对的映射,每个键对应一个值。Java提供了多个实现Map接口的类,如HashMap、TreeMap、LinkedHashMap等。

  • Stack
    Stack是一个后进先出(LIFO)的堆栈,继承自Vector类。

  • PriorityQueue
    PriorityQueue是一个优先级队列,元素按照自然排序或指定的比较器排序。它实现了Queue接口。

2. ArrayList

在这里插入图片描述
ArrayList内部使用一个Object类型的数组来存储元素。初始时,ArrayList创建一个长度为0的数组。当向ArrayList中添加元素时,会先判断数组是否已满。如果数组已满,则会创建一个新的数组,并将原数组中的元素复制到新数组中,同时将新元素添加到新数组的末尾。新数组的长度一般是原数组的1.5倍。

ArrayList会根据需要自动扩容。当添加元素时,如果当前数组已满,则会创建一个新数组,并将原数组中的元素复制到新数组中,同时将新元素添加到新数组的末尾。新数组的长度一般是原数组的1.5倍。由于数组是在内存中连续存储的,因此当数组需要扩容时,需要先创建一个新的数组,将原数组中的元素复制到新数组中,这个过程比较耗时。为了减少扩容的次数,一般会在创建ArrayList对象时,指定一个初始容量,以避免过多的扩容操作。

ArrayList的get()和set()方法的时间复杂度为O(1),即常数时间。但是,向ArrayList中插入或删除元素的操作的时间复杂度为O(n),其中n为元素的个数,因为需要移动数组中的元素。

总的来说,ArrayList是一个高效的动态数组实现类,适合于需要快速访问元素,但不需要频繁插入或删除元素的场景。

3. Map主要有哪些类?

在这里插入图片描述

Map是一种键值对的集合,用于存储一组相关的对象。Java提供了多个实现Map接口的类,每个类都有不同的特点和用途。以下是Java中常用的Map类:

  • HashMap
    HashMap是一种散列表实现,它通过哈希函数将键映射到存储桶中,然后在存储桶中查找值。HashMap允许null键和null值,但不保证元素的顺序。HashMap是非线程安全的。
  • TreeMap
    TreeMap是一种基于红黑树实现的有序映射。它保证了元素的顺序,并提供了一些有序的操作,如firstKey()、lastKey()、headMap()、tailMap()和subMap()等。TreeMap不允许null键,但允许null值。TreeMap是非线程安全的。
  • LinkedHashMap
    LinkedHashMap是HashMap的一个子类,它保持元素插入的顺序,也可以保持元素访问的顺序。LinkedHashMap提供了一些有序的操作,如get()、put()和remove()等。LinkedHashMap允许null键和null值。LinkedHashMap是非线程安全的。
  • Hashtable
    Hashtable是一种基于哈希表的实现,类似于HashMap,但是Hashtable是线程安全的。Hashtable不允许null键和null值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值