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元素的存在

相关文章
|
25天前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
25天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
7天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
29 5
|
20天前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
31 4
|
23天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
37 4
|
23天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
24 4
|
21天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
24 1
|
7月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
存储 缓存 安全
Java集合框架(Map篇)
在这个示例代码中,首先定义了一个数组和一个集合,并使用Arrays.asList()方法将数组转换成集合。接着对数组和集合分别进行排序,使用binarySearch()方法查找元素位置,使用copyOf()和copy()方法复制数组和集合,最后输出结果。可以看到,Arrays和Collections提供的方法可以方便地对数组和集合进行操作,节省开发者的时间和精力。
|
7月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解
102 0