文章目录
- 1. 集合有哪些类?
- 2. ArrayList
- 3. Map主要有哪些类?
容器主要包括 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值。