Java中有哪些集合?✍
Java中提供了多种集合类型,共分为三个大类:
-
List(列表):元素按照插入顺序有序排列,可以包含重复元素。常用实现类有ArrayList、LinkedList和Vector。
-
Set(集合):元素无序排列,不允许包含重复元素。常用实现类有HashSet、LinkedHashSet和TreeSet。
-
Map(映射表):元素由键-值对(key-value pair)组成,每个键在Map中唯一对应一个值。常用实现类有HashMap、LinkedHashMap和TreeMap。
这些集合都包含在java.util包中。此外,Java还提供了两个通用的集合接口:
-
Collection:所有集合类的基本接口,定义了集合的基本操作方法,例如添加元素、删除元素、遍历元素等。
-
Iterator:迭代器接口,用于遍历集合元素,提供了hasNext()和next()方法。
需要注意的是,Java 8开始提供了流式编程框架(Stream API),它提供了基于Lambda表达式的数据处理方式,对集合的处理更加灵活高效。除了上述的集合类型,Stream API提供了IntStream、LongStream、DoubleStream等新的集合类型,用于处理基本数据类型的元素。
List集合实现类的方法
Java中的List是一种有序集合,允许重复元素。Java提供了多个List实现类,包括ArrayList、LinkedList和Vector。以下是它们的常用方法:
1. ArrayList
ArrayList使用可变数组来存储元素,因此能够快速随机访问元素。
- add(E e):将指定元素添加到List尾部。
- add(int index, E element):在指定位置插入指定元素。
- remove(int index):移除指定位置的元素。
- get(int index):获取指定位置的元素。
- set(int index, E element):将指定位置的元素替换为新元素。
- size():返回List中元素的数量。
- clear():清空List中所有元素。
2. LinkedList
LinkedList使用双向链表来存储元素,因此能够快速在任意位置插入或删除元素。
- add(E e):将指定元素添加到List尾部。
- add(int index, E element):在指定位置插入指定元素。
- remove(int index):移除指定位置的元素。
- get(int index):获取指定位置的元素。
- set(int index, E element):将指定位置的元素替换为新元素。
- size():返回List中元素的数量。
- clear():清空List中所有元素。
3. Vector
Vector与ArrayList类似,但是线程安全。不过,如果不需要线程安全,则建议使用ArrayList。
- add(E e):将指定元素添加到List尾部。
- add(int index, E element):在指定位置插入指定元素。
- remove(int index):移除指定位置的元素。
- get(int index):获取指定位置的元素。
- set(int index, E element):将指定位置的元素替换为新元素。
- size():返回List中元素的数量。
- clear():清空List中所有元素。
这些方法在List的所有实现类中都存在,但是它们的具体实现可能会有所不同。此外,List还提供了一些特定于某些实现的方法,例如:
-
ArrayList和Vector
- public Iterator iterator():返回List中所有元素的迭代器。
- public ListIterator listIterator():返回List中所有元素的列表迭代器。
-
LinkedList
- public void addFirst(E e):将指定元素添加到List头部。
- public void addLast(E e):将指定元素添加到List尾部。
- public E getFirst():获取List头部的元素。
- public E getLast():获取List尾部的元素。
此外,还可以使用List接口提供的toArray()
方法将List转换为数组,并对该数组进行操作。
Set集合实现类的方法
Java中的Set是一种无序集合,其中不允许有重复元素。
具体来说,如果将两个对象加入到同一个Set中,其中一个对象已经存在,则新对象将被忽略并保留原先的对象。这使得Set成为一种非常有用的数据结构,可以用于去除重复项并进行高效的查找和比较操作。
Java提供了多个Set实现类,包括HashSet、LinkedHashSet和TreeSet。以下是它们的常用方法:
1. HashSet
HashSet使用哈希表来存储元素,因此可以快速查找元素。它不保证元素的顺序。
- add(E e):将指定元素添加到Set中。
- remove(Object o):从Set中移除指定元素。
- contains(Object o):判断Set是否包含指定元素。
- size():返回Set中元素的数量。
- clear():清空Set中所有元素。
2. LinkedHashSet
LinkedHashSet维护插入顺序,即按照元素插入Set的顺序进行迭代遍历。
- add(E e):将指定元素添加到Set中。
- remove(Object o):从Set中移除指定元素。
- contains(Object o):判断Set是否包含指定元素。
- size():返回Set中元素的数量。
- clear():清空Set中所有元素。
3. TreeSet
TreeSet使用红黑树来存储元素,因此能够以排序的方式存储元素。注意,如果要使用自定义排序规则,则要求元素实现Comparable接口或传递一个Comparator对象给TreeSet构造器。
- add(E e):将指定元素添加到Set中。
- remove(Object o):从Set中移除指定元素。
- contains(Object o):判断Set是否包含指定元素。
- size():返回Set中元素的数量。
- clear():清空Set中所有元素。
这些方法在Set的所有实现类中都存在,但是它们的具体实现可能会有所不同。此外,Set还提供了一些特定于某些实现的方法,例如:
-
HashSet和LinkedHashSet
- public Iterator iterator():返回Set中所有元素的迭代器。
-
TreeSet
- public E first():返回Set中第一个(最小的)元素。
- public E last():返回Set中最后一个(最大的)元素。
此外,还可以使用Set接口提供的toArray()
方法将Set转换为数组,并对该数组进行操作。
Map集合实现类的方法
Java中的Map是一种键值对存储结构,其中每个键都唯一对应一个值。常用Map实现类有HashMap、LinkedHashMap和TreeMap。以下是它们的常用方法:
1.HashMap
HashMap是一种基于哈希表实现的键值对存储结构,可以快速地根据键来查找值。
- put(K key, V value):将指定的键值对添加到Map中。
- get(Object key):获取指定键所对应的值。
- remove(Object key):从Map中移除指定键所对应的键值对。
- containsKey(Object key):判断Map是否包含指定的键。
- size():返回Map中键值对的数量。
- clear():清空Map中所有的键值对。
2. LinkedHashMap
LinkedHashMap与HashMap类似,但它保持了插入顺序,即元素按照它们插入的顺序进行迭代访问。
- put(K key, V value):将指定的键值对添加到Map中。
- get(Object key):获取指定键所对应的值。
- remove(Object key):从Map中移除指定键所对应的键值对。
- containsKey(Object key):判断Map是否包含指定的键。
- size():返回Map中键值对的数量。
- clear():清空Map中所有的键值对。
3. TreeMap
TreeMap按照键的自然排序(默认升序)或者自定义排序规则来维护键值对。注意,如果使用自定义排序规则,则要求键实现Comparable接口或传递一个Comparator对象给TreeMap构造器。
- put(K key, V value):将指定的键值对添加到Map中。
- get(Object key):获取指定键所对应的值。
- remove(Object key):从Map中移除指定键所对应的键值对。
- containsKey(Object key):判断Map是否包含指定的键。
- size():返回Map中键值对的数量。
- clear():清空Map中所有的键值对。
这些方法在Map的所有实现类中都存在,但是它们的具体实现可能会有所不同。此外,Map还提供了一些特定于某些实现的方法,例如:
-
HashMap和LinkedHashMap
- public Collection values():返回Map中所有值的Collection视图。
- public Set<Map.Entry<K, V>> entrySet():返回Map中所有键值对的Set视图。
-
TreeMap
- public Map.Entry<K, V> firstEntry():返回Map中第一个(最小的)键值对。
- public Map.Entry<K, V> lastEntry():返回Map中最后一个(最大的)键值对。
此外,还可以使用Map接口提供的keySet()方法来获取Map中所有键的Set视图,然后可以在该Set上执行迭代等操作。
♒罗列一下Java中各个集合接口的方法♒
Java中的集合框架提供了多个接口,每个接口都有自己特定的方法。以下是Java中常见的集合接口及其方法:
1. Collection接口
Collection接口是Java集合框架中最基本的接口,它表示一组对象的容器,并提供了基本的操作方法来管理集合中的元素,如添加、删除、遍历等。
该接口下还派生出了许多其他的子接口和实现类,如List、Set、Queue等。
其中,List接口可以维护元素的顺序并允许重复,Set接口不允许重复元素并且没有顺序,Queue接口则代表了一种先进先出的队列数据结构。
通过这些接口,我们可以选择不同的集合类型来满足不同的需求。
- int size():返回集合中元素的数量
- boolean isEmpty():判断集合是否为空
- boolean contains(Object obj):判断集合是否包含指定的元素
- boolean add(E e):向集合中添加一个元素
- boolean remove(Object obj):从集合中移除指定的元素
- void clear():清空集合中所有元素
- Iterator iterator():返回该集合上的迭代器
举例说明Collection接口常用的方法
Java中的Collection是一个接口,常用的实现类有List、Set和Queue等。Collection接口定义了许多常用的方法,下面列举了一些常用的方法及其作用:
- add(E e):向集合中添加一个元素,并返回true。
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
- remove(Object o):从集合中删除指定对象的第一个出现。
list.remove("apple"); // 删除列表中第一个出现的"apple"
- contains(Object o):判断集合是否包含指定对象,如果包含则返回true,否则返回false。
boolean containsBanana = list.contains("banana"); // 判断集合中是否包含"banana"
- size():返回集合中的元素数量。
int size = list.size(); // 获取集合中的元素数量
- isEmpty():判断集合是否为空。
boolean empty = list.isEmpty(); // 判断集合是否为空
- clear():删除集合中的所有元素。
list.clear(); // 删除集合中的所有元素
- iterator():返回迭代器,用于遍历集合中的元素。
ListIterator<String> iter = list.listIterator();
while (iter.hasNext()) {
String element = iter.next();
System.out.println(element);
}
- addAll(Collection<? extends E> c):将另一个集合中的所有元素添加到当前集合中。
List<String> otherList = new ArrayList<>();
otherList.add("orange");
otherList.add("pear");
list.addAll(otherList); // 将otherList集合中的元素添加到list集合中
- removeAll(Collection<?> c):删除集合中在另一个集合指定的元素。
List<String> listToRemove = new ArrayList<>();
listToRemove.add("banana");
list.removeAll(listToRemove); // 从集合中删除"banana"
- retainAll(Collection<?> c):保留集合中在另一个集合指定的元素,删除不在另一个集合中的元素。
List<String> listToRetain = new ArrayList<>();
listToRetain.add("banana");
list.retainAll(listToRetain); // 保留集合中的"banana"元素,删除其他元素
2. List接口
List接口是Java集合框架中的一种有序集合类型,可以存储重复元素,并提供了按照索引访问、添加、删除等操作方法。
List接口的常用实现类包括ArrayList和LinkedList,其中ArrayList底层使用数组实现,支持随机访问和快速插入/删除操作;而LinkedList底层使用链表实现,支持快速插入/删除操作,但不支持随机访问。
除此之外,List接口还提供了一些特殊的操作方法,如截取子列表、替换元素等。由于List接口具有有序、可重复的特点,因此通常用于需要维护元素顺序并可能存在重复元素的场景,如记录日志、保存聊天记录等。
List继承于Collection接口,因此它具有Collection接口中定义的所有方法,以及以下额外的方法:
- E get(int index):返回列表中指定位置的元素
- E set(int index, E element):用指定元素替换列表中指定位置的元素
- void add(int index, E element):在列表的指定位置插入指定元素
- E remove(int index):移除列表中指定位置的元素
- int indexOf(Object o):返回列表中指定元素的第一次出现的索引值
- int lastIndexOf(Object o):返回列表中指定元素的最后一次出现的索引值
举例说明List接口常用的方法
Java中List是一个接口,常用的实现类有ArrayList和LinkedList。List接口定义了许多常用的方法,下面列举了一些常用的方法及其作用:
- add(E e):将元素添加到列表末尾,并返回true。
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
- add(int index, E element):在指定位置插入元素。
list.add(1, "orange"); // 将"orange"插入到索引为1的位置上
- remove(Object o):从列表中删除指定对象的第一个出现。
list.remove("apple"); // 删除列表中第一个出现的"apple"
- remove(int index):删除指定位置的元素。
list.remove(0); // 删除列表中索引为0的元素
- get(int index):获取指定位置的元素。
String fruit = list.get(1); // 获取列表中索引为1的元素
- set(int index, E element):用指定元素替换列表中指定位置的元素,并返回原来的元素。
String oldFruit = list.set(0, "pear"); // 将列表中索引为0的元素替换成"pear",并返回原来的"apple"
- size():返回列表中的元素数量。
int size = list.size(); // 获取列表中的元素数量
- indexOf(Object o):返回指定对象在列表中第一次出现的索引,如果不存在则返回-1。
int index = list.indexOf("banana"); // 获取"banana"在列表中第一次出现的索引
- isEmpty():判断列表是否为空。
boolean empty = list.isEmpty(); // 判断列表是否为空
- clear():删除列表中的所有元素。
list.clear(); // 删除列表中的所有元素
3. Set接口
Set接口是Java集合框架中的一种无序集合类型,不允许存储重复元素,并提供了添加、删除、查找等基本操作方法。
Set接口的常用实现类包括HashSet和TreeSet,其中HashSet底层使用哈希表实现,支持快速的插入和删除操作;而TreeSet底层使用红黑树实现,可以保证元素有序并具有较好的查找性能。
由于Set接口不允许重复元素的存在,因此通常用于需要去重的场景,如统计词频、过滤重复数据等。
Set继承于Collection接口,因此它具有Collection接口中定义的所有方法,以及以下额外的方法:
- boolean addAll(Collection<? extends E> c):将指定集合中的所有元素添加到此集合中
- boolean removeAll(Collection<?> c):从该集合中移除包含在指定集合中的所有元素
- boolean retainAll(Collection<?> c):仅保留该集合中包含在指定集合中的元素
举例说明Set接口常用的方法
Java中的Set是一个接口,常用的实现类有HashSet、LinkedHashSet和TreeSet。Set接口继承自Collection接口,因此除了Collection中定义的方法外,还定义了一些特定于集合的方法。下面列举了一些Set集合常用的方法及其作用:
- add(E e):将元素添加到集合中,并返回true,如果元素已存在则不会添加。
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
- remove(Object o):从集合中删除指定对象,如果对象存在则返回true,否则返回false。
set.remove("apple"); // 从集合中删除"apple"
- contains(Object o):判断集合是否包含指定对象,如果包含则返回true,否则返回false。
boolean containsBanana = set.contains("banana"); // 判断集合中是否包含"banana"
- size():返回集合中的元素数量。
int size = set.size(); // 获取集合中的元素数量
- isEmpty():判断集合是否为空。
boolean empty = set.isEmpty(); // 判断集合是否为空
- clear():删除集合中的所有元素。
set.clear(); // 删除集合中的所有元素
- iterator():返回迭代器,用于遍历集合中的元素。
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
String element = iter.next();
System.out.println(element);
}
- addAll(Collection<? extends E> c):将另一个集合中的所有元素添加到当前集合中。
Set<String> otherSet = new HashSet<>();
otherSet.add("orange");
otherSet.add("pear");
set.addAll(otherSet); // 将otherSet集合中的元素添加到set集合中
- removeAll(Collection<?> c):删除集合中在另一个集合指定的元素。
Set<String> setToRemove = new HashSet<>();
setToRemove.add("banana");
set.removeAll(setToRemove); // 从集合中删除"banana"
- retainAll(Collection<?> c):保留集合中在另一个集合指定的元素,删除不在另一个集合中的元素。
Set<String> setToRetain = new HashSet<>();
setToRetain.add("banana");
set.retainAll(setToRetain); // 保留集合中的"banana"元素,删除其他元素
4. Map接口
Map接口是Java集合框架中的一种键值对映射容器,用于存储一组具有唯一键的对象,并提供了基本的操作方法来管理这些对象。
Map接口的常用实现类包括HashMap和TreeMap,其中HashMap底层使用哈希表实现,支持快速查找和插入操作;而TreeMap底层使用红黑树实现,可以保证元素按照键的自然顺序排序并具有较好的查找性能。
除此之外,Map接口还提供了许多特殊的操作方法,如获取所有键、获取所有值、键值对遍历等。
由于Map接口允许通过键来快速查找对应的值,因此通常用于需要快速查找、保存、更新数据的场景,如缓存、配置文件解析等。
-
int size():返回Map中键值对的数量
-
boolean isEmpty():判断Map是否为空
-
boolean containsKey(Object key):判断Map是否包含给定的键
-
boolean containsValue(Object value):判断Map是否包含给定的值
-
V get(Object key):返回与指定键关联的值
-
V put(K key, V value):将指定的键值对添加到Map中
-
V remove(Object key):从Map中移除指定键的映射关系
-
void putAll(Map<? extends K,? extends V> m):将指定Map中所有的映射关系添加到该Map中
-
void clear():从Map中移除所有映射关系
-
Set keySet():返回Map中所有键的Set视图
-
Collection values():返回Map中所有值的Collection视图
-
Set<Map.Entry<K, V>> entrySet():返回Map中所有键值对的Set视图
举例说明Map接口常用的方法
Java中的Map是一个接口,常用的实现类有HashMap、LinkedHashMap和TreeMap。Map接口定义了许多常用的方法,下面列举了一些常用的方法及其作用:
- put(K key, V value):将指定的键值对添加到Map中,并返回该key之前映射的value(如果存在),否则返回null。
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
- get(Object key):返回与指定键关联的值,如果没有找到映射,则返回null。
Integer value = map.get("apple"); // 获取key为"apple"的value
- remove(Object key):从Map中删除指定键的映射,并返回与键关联的值(如果存在),否则返回null。
Integer removedValue = map.remove("banana"); // 删除key为"banana"的映射,并返回对应的value
- containsKey(Object key):如果Map包含指定的键,则返回true,否则返回false。
boolean containsApple = map.containsKey("apple"); // 判断Map中是否包含key为"apple"
- containsValue(Object value):如果Map中包含指定的值,则返回true,否则返回false。
boolean containsOne = map.containsValue(1); // 判断Map中是否包含value为1的映射
- size():返回Map中的键值对数量。
int size = map.size(); // 获取Map中的键值对数量
- keySet():返回Map中所有键组成的Set集合。
Set<String> keySet = map.keySet(); // 获取Map中所有键组成的Set集合
- values():返回Map中所有值组成的Collection集合。
Collection<Integer> values = map.values(); // 获取Map中所有值组成的Collection集合
- entrySet():返回Map中所有键值对组成的Set集合。
Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); // 获取Map中所有键值对组成的Set集合
- clear():从Map中删除所有键值对。
map.clear(); // 从Map中删除所有键值对
Java中有哪些数组?✍
Java 中主要有以下几种类型的数组:
-
一维数组:最常见的数组类型,它包含单个行或列。每个元素都可以通过其索引进行访问。
int[] arr = new int[5]; // 定义一个长度为5的整型数组
-
多维数组:由多个一维数组组成的数组。Java 中支持的多维数组是二维数组和三维数组。
int[][] arr2D = new int[3][4]; // 定义一个3行4列的二维整数数组 int[][][] arr3D = new int[3][4][5]; // 定义一个3行4列5深度的三维整数数组
除了这些常见的数组类型,还有一些特殊的数组类型,例如 ArrayList 和 Vector,它们实际上是使用动态数组实现的集合(Collection)类,并不是真正的数组。
数组的常用方法
Java数组是一种基础且重要的数据结构,常用的数组方法包括:
- length:返回数组长度。
示例代码:
int[] nums = {1, 2, 3, 4, 5};
System.out.println(nums.length); // 输出 5
- clone:复制数组。
示例代码:
int[] nums1 = {1, 2, 3, 4, 5};
int[] nums2 = nums1.clone();
System.out.println(Arrays.toString(nums2)); // 输出 [1, 2, 3, 4, 5]
- toString:将数组转换为字符串。
示例代码:
int[] nums = {1, 2, 3, 4, 5};
String str = Arrays.toString(nums);
System.out.println(str); // 输出 [1, 2, 3, 4, 5]
- equals:比较两个数组是否相等。
示例代码:
int[] nums1 = {1, 2, 3, 4, 5};
int[] nums2 = {1, 2, 3, 4, 5};
boolean flag = Arrays.equals(nums1, nums2);
System.out.println(flag); // 输出 true
- sort:对数组进行排序。
示例代码:
int[] nums = {5, 2, 1, 4, 3};
Arrays.sort(nums);
System.out.println(Arrays.toString(nums)); // 输出 [1, 2, 3, 4, 5]
- binarySearch:在有序数组中查找指定元素的位置。
示例代码:
int[] nums = {1, 2, 3, 4, 5};
int index = Arrays.binarySearch(nums, 3);
System.out.println(index); // 输出 2
- copyOf:复制指定长度的数组。
示例代码:
int[] nums1 = {1, 2, 3, 4, 5};
int[] nums2 = Arrays.copyOf(nums1, 3);
System.out.println(Arrays.toString(nums2)); // 输出 [1, 2, 3]
- fill:填充数组元素。
示例代码:
int[] nums = new int[5];
Arrays.fill(nums, 1);
System.out.println(Arrays.toString(nums)); // 输出 [1, 1, 1, 1, 1]
- asList:将数组转换为列表。
示例代码:
String[] strs = {"hello", "world"};
List<String> list = Arrays.asList(strs);
System.out.println(list); // 输出 [hello, world]
- hashCode:返回数组的哈希码。
示例代码:
int[] nums = {1, 2, 3, 4, 5};
int code = Arrays.hashCode(nums);
System.out.println(code); // 输出 -862545276
这些方法都是Java数组中常用的方法,掌握它们的使用可以方便地对数组进行操作。当然,Java中还有很多其他的数组相关方法,可以根据实际开发需求进行学习和使用。
数组工具类的常用方法
Java 数组工具类是 java.util.Arrays
,它提供了一系列用于操作数组的方法。下面是其中一些常用的方法及其示例:
-
toString()
:将数组转换成字符串输出。int[] arr = {1, 2, 3, 4}; String strArr = Arrays.toString(arr); // "[1, 2, 3, 4]"
-
sort()
:对数组进行排序。int[] arr = {4, 2, 1, 3}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // "[1, 2, 3, 4]"
-
binarySearch()
:在有序数组中查找指定元素。int[] arr = {1, 2, 3, 4}; int index = Arrays.binarySearch(arr, 3); // 2
-
copyOf()
:复制数组。int[] arr = {1, 2, 3, 4}; int[] newArr = Arrays.copyOf(arr, 6); System.out.println(Arrays.toString(newArr)); // "[1, 2, 3, 4, 0, 0]"
-
fill()
:填充数组。int[] arr = new int[5]; Arrays.fill(arr, 1); System.out.println(Arrays.toString(arr)); // "[1, 1, 1, 1, 1]"
-
asList()
:将数组转换成列表。Integer[] arr = {1, 2, 3, 4}; List<Integer> list = Arrays.asList(arr);
注意,上述示例只是其中一部分,Arrays 类还有其他很多方法。