-
1、List
在Java中,
List
是一个接口,它继承自Collection
接口。List
接口的实现类可以存储一个有序的集合(也称为序列)。这个集合允许包含重复的元素,并且每个元素都有其对应的索引。
List
接口提供了许多方法来操作列表中的元素,比如添加、删除、获取、修改元素等。
List接口的主要实现类
ArrayList
:基于动态数组的数据结构,允许null值和重复值。查询速度快,但插入和删除操作(尤其是在列表的开头或中间)可能相对较慢,因为需要移动元素。LinkedList
:基于链表的数据结构,同样允许null值和重复值。插入和删除操作(尤其是在列表的开头或结尾)速度较快,因为只需要改变节点之间的链接。但是,查询特定索引位置的元素可能较慢,因为需要从头节点开始遍历链表。Vector
:与ArrayList
类似,但它是同步的。这意味着在多线程环境中,Vector
提供了线程安全性的保证,但这也带来了性能上的开销。由于ArrayList
在大多数情况下提供了更好的性能,并且可以使用Collections.synchronizedList
方法来获得同步的ArrayList
,因此Vector
现在较少使用。
List接口的主要方法
boolean add(E e)
:将指定的元素添加到列表的末尾。void add(int index, E element)
:在列表的指定位置插入指定的元素。boolean remove(Object o)
:从列表中移除指定元素的第一个匹配项(如果存在)。E remove(int index)
:移除列表中指定位置的元素。E get(int index)
:返回列表中指定位置的元素。E set(int index, E element)
:用指定的元素替换列表中指定位置的元素。int size()
:返回列表中的元素数量。boolean isEmpty()
:如果列表不包含元素,则返回true
。boolean contains(Object o)
:如果列表包含指定的元素,则返回true
。Iterator<E> iterator()
:返回按适当顺序在列表的元素上进行迭代的迭代器。List<E> subList(int fromIndex, int toIndex)
:返回列表中指定的fromIndex
(包括)和toIndex
(不包括)之间的部分视图。
示例代码
-
2、Set
在Java中,
Set
是一个接口,它同样继承自Collection
接口。与List
不同,Set
接口不允许其实现类包含重复的元素。Set
接口的实现类主要用于存储不重复的元素集合。Set接口的主要实现类
HashSet
:基于HashMap
实现,不保证集合的迭代顺序;允许使用null
元素(但最多只能有一个null
元素,因为HashSet
是通过元素的
hashCode()
和equals()
方法来确定元素是否重复的)。HashSet
提供了较快的查找、添加和删除操作,因为它们的性能主要取决于底层
HashMap
的性能。LinkedHashSet
:具有HashSet
的所有特性,同时维护了一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照元素被添加到LinkedHashSet
中的顺序(插入顺序)进行迭代。TreeSet
:基于TreeMap
实现,能够按照自然顺序或者根据创建TreeSet
时提供的Comparator
进行排序。TreeSet
不允许null
元素。
Set接口的主要方法
Set
接口继承了Collection
接口的所有方法,但由于Set
不允许重复元素,因此一些方法的行为在Set
中有所不同。例如,add(E e)
方法在添加元素时,如果Set
已经包含了该元素(根据equals()
方法判断),则不会添加该元素,并且返回false
。以下是一些
Set
接口特有的(或行为不同的)方法:boolean add(E e)
:如果指定元素尚未存在于集合中,则将其添加到集合中。boolean remove(Object o)
:如果集合包含指定的元素,则将其从集合中移除。boolean contains(Object o)
:如果集合包含指定的元素,则返回true
。int size()
:返回集合中的元素数(即唯一元素的数量)。boolean isEmpty()
:如果集合不包含元素,则返回true
。Iterator<E> iterator()
:返回按某种顺序(具体取决于Set
的实现)在集合的元素上进行迭代的迭代器。
示例代码
-
3、Map
在Java编程语言中,
Map
是一个至关重要的接口,它隶属于java.util
包。Map
接口主要用来存储键值对(key-value pairs),其中每个键(key)都是独一无二的,并且与一个特定的值(value)形成关联。这种数据结构使得我们能够以极快的速度,通过
键来检索或更新与之关联的值。
Map接口的核心实现类
HashMap
:HashMap
是基于哈希表的映射实现,它并不保证映射的次序会按照键的自然顺序或添加顺序来排列。需要留意的是,HashMap
允许键或值为null
(但每个HashMap
实例中只能有一个null
键)。LinkedHashMap
:LinkedHashMap
是HashMap
的一个子类,它维护了一个双向链表,该链表记录了所有条目的插入顺序。因此,LinkedHashMap
能够按照条目被插入的顺序进行迭代。TreeMap
:TreeMap
则是基于红黑树的数据结构来实现映射的,它能够确保映射按键的自然顺序(或创建TreeMap
时指定的Comparator
顺序)进行排序。TreeMap
不允许键为null
。Hashtable
:尽管Hashtable
也是一个早期的、实现了Map
接口的类,但它与HashMap
在同步性上存在差异。Hashtable
是线程安全的,这意味着它在多线程环境中使用时,无需额外的同步措施。然而,Hashtable
不允许键或值为null
。Properties
:Properties
类继承自Hashtable
,它主要用于处理配置数据。Properties
类允许使用字符串键和值,并且提供了一些便捷的方法来加载和存储属性。
Map接口的关键方法
Map
接口定义了一系列用于操作键值对的方法,这些方法大致可以分为以下几类:添加、更新或移除键值对:
V put(K key, V value)
:将一个键值对存入映射中。如果该键已存在,则更新其对应的值。V remove(Object key)
:根据键来移除映射中的键值对。检索值:
V get(Object key)
:根据键来检索映射中的值。如果键不存在,则返回null
。检查映射内容:
boolean containsKey(Object key)
:检查映射中是否包含指定的键。boolean containsValue(Object value)
:检查映射中是否包含指定的值。boolean isEmpty()
:检查映射是否为空。int size()
:返回映射中键值对的数量。遍历映射:
Set<K> keySet()
:返回一个包含映射中所有键的Set
视图。Collection<V> values()
:返回一个包含映射中所有值的Collection
视图。Set<Map.Entry<K, V>> entrySet()
:返回一个包含映射中所有键值对(作为Map.Entry
对象)的Set
视图。
示例代码
关闭