Java中常见的集合框架及常用的方法

简介: Map:此接口实现了Key到Value的映射,一个Map中不能包含相同的Key,每个Key只能映射一个ValueHashTable:实现了一个Key-Value的哈希表,每一个非null元素都可作为Key或者Value,同时HashTable也是线程安全的HashMap:和HashTable的不同之处是,不是线程安全的,且允许null元素的存在

本篇文章主要说明Java中一些常见的集合框架及经常用到的一些方法 , 由于都是一些父类 , 所以没有做太深入的分析说明 , 后面的文章将会分别对List , Set , Map及其常用子类进行深入研究分析


Collection类图

f1c87265664e5db53c6688560384b158_dd287a76cd8e5c6aae47510cbddc7a10.jpeg


Collection

集合层次结构中的根接口 , 一个集合表示一组对象 , 称其为一组元素 , 一些集合允许元素重复 , 一些集合不允许元素重复 , JDK不提供任何此接口具体的实现 , 而是提供了更多的子接口如Set , List , 希望具有更大的通用性


Collection相关方法

// 向集合添加元素e,若指定集合元素改变了则返回true
boolean add(E e);
// 把集合C中的元素全部添加到集合中,若指定集合元素改变返回true
boolean addAll(Collection<? extends E> c)
// 清空所有集合元素
void clear();
// 判断指定集合是否包含对象
boolean contains(Object o);
// 判断指定集合是否包含集合c的所有元素
boolean containsAll(Collection<?> c);
// 判断指定集合的元素size是否为0
boolean isEmpty();
// 删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素
boolean remove(Object o);
// 删除指定集合包含集合c的元素
boolean removeAll(Collection<?> c);
// 从指定集合中保留包含集合c的元素,其他元素则删除
boolean retainAll(Collection<?> c);
// 集合的元素个数
int size();
// 将集合转换为T类型的数组
T[] toArray(T[] a)

List

有序集合 , 这个接口的使用者可以更加精确的控制每个元素在列表中插入的位置 , 并且可以通过整数索引(列表中的位置)访问元素 , 它和Set不同 , 通常允许元素重读并且是有序的


List相关方法

// 向列表的尾部追加指定的元素
boolean add(E o);
// 在列表的指定位置插入指定元素
void add(int index,E element);
// 将指定collection中的所有元素都插入到列表中
boolean addAll(Collection<? extends E> c);
// 将指定collection中的所有元素都插入到列表中的指定位置
boolean addAll(int index,Collection<? extends E> c);
// 从列表中移除所有元素
void clear();
// 如果列表包含指定的元素,则返回true
boolean contains(Object o);
// 如果列表包含指定collection的所有元素,则返回true
boolean containsAll(Collection<?> c);
// 比较指定的对象与列表是否相等
boolean equals(Object c);
// 返回列表中指定位置的元素
E get(int index);
// 返回列表的哈希码值
int hashCode();
// 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回-1
int indexOf(Object o);
// 判断集合是否为空 如果为空 则返回true,否则返回false
boolean isEmpty();
// 返回以正确顺序在列表的元素上进行迭代的迭代器
Iterator<E> iterator();
// 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回-1
int lastIndexOf(Object o);
// 返回列表中元素的列表迭代器(以正确的顺序)
ListIterator<E> listIterator();
// 返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始
ListIterator<E> listIterator(int index);
// 移除列表中指定位置的元素
E remove(int index);
// 移除列表中出现的首个指定元素
boolean remove(Object o);
// 从列表中移除指定collection中包含的所有元素
boolean removeAll(Collection<?> c);
// 仅在列表中保留指定collection中所包含的元素
boolean retainAll(Collection<?> c);
// 用指定元素替换列表中指定位置的元素
E set(int index,E element);
// 返回列表中的元素数。
int size();
// 返回列表中指定的formIndex(包括) 和toIndex(不包括)之间的部分视图
List<E> subList(int forIndex,int toIndex);
// 返回以正确顺序包含列表中的所有元素的数组
Object toArray();

Set

不包含重复元素的无序集合 , 并且集合中最多只有一个空元素的集合


Set集合常用方法

// 如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
boolean add(E e);
// 如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。
boolean addAll(Collection<? extends E> c);
// 移除此 set 中的所有元素(可选操作)。
void clear();
// 如果 set 包含指定的元素,则返回 true。
boolean contains(Object o);
// 如果此 set 包含指定 collection 的所有元素,则返回 true。
boolean containsAll(Collection<?> c);
// 比较指定对象与此 set 的相等性。
boolean equals(Object o);
// 返回 set 的哈希码值。
int hashCode();
// 如果 set 不包含元素,则返回 true。
boolean isEmpty();
// 返回在此 set 中的元素上进行迭代的迭代器。
Iterator<E> iterator();
// 如果 set 中存在指定的元素,则将其移除(可选操作)。
boolean remove(Object o);
// 移除 set 中那些包含在指定 collection 中的元素(可选操作)。
boolean removeAll(Collection<?> c);
// 仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
boolean retainAll(Collection<?> c);
// 返回 set 中的元素数(其容量)。
int size();
// 返回一个包含 set 中所有元素的数组。
Object[] toArray();
// 返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
<T> T[]toArray(T[] a);


Iterator

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。


Java中的Iterator功能比较简单,并且只能单向移动:


(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。


(2) 使用next()获得序列中的下一个元素。


(3) 使用hasNext()检查序列中是否还有元素。


(4) 使用remove()将迭代器新返回的元素删除。


Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。


Iterator常用方法

// 如果仍有元素可以迭代则返回true
boolean hasNext();
// 返回的迭代的下一个元素
E next();
// 从迭代器指向的collection中移除迭代器返回的最后一个元素
void remove();

demo使用示例

public class IteratorDemo {
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        Iterator<Object> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
            iterator.remove();
        }
        System.out.println(list);
    }
}

Map

Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。


Map常用方法

// 向集合中添加元素。
V put(K key, V value);
// 通过指定key获取value。
V get(Object key);
// 获取集合中元素的个数。
int size();
// 清空集合,元素个数变为0。
void clear();
// 判断集合元素个数是否为0。
boolean isEmpty();
// 判断集合中是否包含指定key。
boolean containsKey(Object key);
// 判断集合中是否包含指定value。
boolean containsValue(Object value);
// 获取集合中所有的key,返回一个包含所有key元素的Set集合。
Set<泛型> keySet();
// 获取集合中所有的value,返回一个包含所有value元素的Collection集合。
Collection values();
// 删除指定key的键值对。
V remove(Object key);
// 修改键值对<key, oldValue>的value为newValue。
default boolean replace(K key, V oldValue, V newValue);
// 将Map集合转换成Set集合。
Set<Map.Entry<K,V>> entrySet();

分别辩解

Collection:Collection是一个父接口,List和Set是继承自他的子接口,Collection是最基本的集合接口,Java SDK中不提供直接继承,自Collection的类,而是提供继承自他子接口的类,如List和Set。所用的Collection类都支持一个Iterator()方法来遍历。


List:List接口是有序的,会精确的将元素插入到指定的位置,和下面的Set接口不同,List接口允许有相同元素


ArrayList:实现可变大小的数组,允许所有的元素,不是同步的,也就是没有同步方法


LinkList:允许null元素,通常在首部或者尾部操作,所以常被使用作堆栈(stack)、队列(queue)和双向队列(deque)


Vector:类似于ArrayList,但Vector是同步的,Stack继承自Vector


Set:是一种不包含重复元素的Collection接口


HashSet:不能有重复元素,底层是使用HashMap来实现的


Map:此接口实现了Key到Value的映射,一个Map中不能包含相同的Key,每个Key只能映射一个Value


HashTable:实现了一个Key-Value的哈希表,每一个非null元素都可作为Key或者Value,同时HashTable也是线程安全的


HashMap:和HashTable的不同之处是,不是线程安全的,且允许null元素的存在

相关文章
|
5月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
393 18
|
5月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
380 8
|
5月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
5月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
161 7
|
5月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
276 4
|
6月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
212 11
|
5月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
370 5
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
存储 缓存 安全
Java集合框架(Map篇)
在这个示例代码中,首先定义了一个数组和一个集合,并使用Arrays.asList()方法将数组转换成集合。接着对数组和集合分别进行排序,使用binarySearch()方法查找元素位置,使用copyOf()和copy()方法复制数组和集合,最后输出结果。可以看到,Arrays和Collections提供的方法可以方便地对数组和集合进行操作,节省开发者的时间和精力。