学习了数组,那么我们也该学习下集合了。相对于数组而言,集合有以下几个特点:
👉I、数组声明了它容纳的元素的类型,而集合不声明。
👉II、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。
👉III、数组不论是效率还是类型检查都是最好的。
用一个表格简单整理下:
数组 | 集合 | |
---|---|---|
声明容纳大小 | 需要声明容纳大小 | 无需声明,但是可以声明大小 |
是否可变容量 | 静态,创建后无法改变 | 动态扩容 |
性能 | 相对集合弱一些 | 相对数组好一些 |
在Java中,集合同数组一样,主要是用于负责保存、盛放数据,因此这些Java对象还有另外一个名字——集合。
注意⚠️:当前实验环境JDK为1.8.0_202 ,实验使用的IDE为IDEA 2022.2。
$ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
在Java中,集合主要分为两个大类,分别是Collection 和 Map,他们都是接口类型,而且还都是根接口,这两个接口又分别包含一些子接口和一些实现类。Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。
方法名称 | 说明 |
---|---|
boolean add(E e) | 向集合中添加一个元素,如果集合对象被添加操作改变了,则返回 true。E 是元素的数据类型 |
boolean addAll(Collection c) | 向集合中添加集合 c 中的所有元素,如果集合对象被添加操作改变了,则返回 true。 |
void clear() | 清除集合中的所有元素,将集合长度变为 0。 |
boolean contains(Object o) | 判断集合中是否存在指定元素 |
boolean containsAll(Collection c) | 判断集合中是否包含集合 c 中的所有元素 |
boolean isEmpty() | 判断集合是否为空 |
Iterator<E>iterator() | 返回一个 Iterator 对象,用于遍历集合中的元素 |
Stream<E> parallelStream() | Java8新增,返回一个有序列的并行的数据流,作为数据的源头 |
boolean remove(Object o) | 从集合中删除一个指定元素,当集合中包含了一个或多个元素 o 时,该方法只删除第一个符合条件的元素,该方法将返回 true。 |
boolean removeAll(Collection c) | 从集合中删除所有在集合 c 中出现的元素(相当于把调用该方法的集合减去集合 c)。如果该操作改变了调用该方法的集合,则该方法返回 true。 |
boolean removeIf(Predicate<? super E> filter) | Java8新增,增加断言过滤删除。移除此集合中满足给定谓词的所有元素。迭代期间或谓词抛出的错误或运行时异常被中继到调用方。 |
boolean retainAll(Collection c) | 从集合中删除集合 c 里不包含的元素(相当于把调用该方法的集合变成该集合和集合 c 的交集),如果该操作改变了调用该方法的集合,则该方法返回 true。 |
Stream<E> stream() | Java8新增,返回一个有序列的数据流,作为数据的源头 |
int size() | 返回集合中元素的个数 |
Object[] toArray() | 把集合转换为一个数组,所有的集合元素变成对应的数组元素。 |
方法名称 | 说明 |
---|---|
interface Entry<K,V> | Java8 中新增一些个比较器,该比较器按键的自然顺序比较、按键的给定顺序比较、按值的自然顺序比较和按值的给定顺序比较。 |
void clear() | 删除该 Map 对象中的所有 key-value 对。 |
V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) | Java8 中新增一些个比较器。 |
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) | Java8 中新增一些个比较器。 |
V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) | Java8 中新增一些个比较器。 |
boolean containsKey(Object key) | 查询 Map 中是否包含指定的 key,如果包含则返回 true。 |
boolean containsValue(Object value) | 查询 Map 中是否包含一个或多个 value,如果包含则返回 true。 |
V get(Object key) | 返回 Map 集合中指定键对象所对应的值。V 表示值的数据类型 |
V put(K key, V value) | 向 Map 集合中添加键-值对,如果当前 Map 中已有一个与该 key 相等的 key-value 对,则新的 key-value 对会覆盖原来的 key-value 对。 |
void putAll(Map m) | 将指定 Map 中的 key-value 对复制到本 Map 中。 |
V remove(Object key) | 从 Map 集合中删除 key 对应的键-值对,返回 key 对应的 value,如果该 key 不存在,则返回 null |
boolean remove(Object key, Object value) | Java8 新增,删除指定 key、value 所对应的 key-value 对。如果从该 Map 中成功地删除该 key-value 对,该方法返回 true,否则返回 false。 |
boolean replace(K key, V oldValue, V newValue) | Java8 新增,仅当指定键当前映射到某个值时,才替换该项。 |
replaceAll(BiFunction<? super K, ? super V, ? extends V> function) | Java8 新增,仅当当前映射到指定值时,才替换指定键的条目。 |
Set entrySet() | 返回 Map 集合中所有键-值对的 Set 集合,此 Set 集合中元素的数据类型为 Map.Entry |
Set keySet() | 返回 Map 集合中所有键对象的 Set 集合 |
boolean isEmpty() | 查询该 Map 是否为空(即不包含任何 key-value 对),如果为空则返回 true。 |
int size() | 返回该 Map 里 key-value 对的个数 |
Collection values() | 返回该 Map 里所有 value 组成的 Collection |
那么集合在使用过程中,有哪些优点呢?
查看这个还不如去看下源码,这里整理的也比较随意。
[1]https://pdai.tech/md/java/collection/java-collection-all.html
[2]http://c.biancheng.net/view/6824.html
好了,今天的分享就到了这里,下次再见!!!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。