Java集合是Java中用于存储和管理一组对象的工具。Java集合提供了相应的方法,用于用户对集合内数据的操作。
Java集合类提供了许多不同的数据结构,如列表、队列、栈、集合和映射,以满足不同类型的编程需求。
程序中如何存储大批量同类型的数据呢?使用数组是没有在学习集合时唯一的办法,数组确实好用,但是有一个缺陷就是数组是固定长度,不管是在定义时设置的长度,还是申请空间时设置的长度,都是有一个长度限制的,存储的数据超过了这个长度,那么就会产生数组下标越界异常。
那么如果在申请内存时,干脆就申请一块很大的空间呢?那不就可以了?但是如果这样申请内存的话,极易造成空间浪费,有可能你申请很大的一块内存,但是只需要使用其中的一点,又或者需要使用的空间还是超过了你申请的空间大小,那么使用起来还是非常的不方便。
这个时候 集合 就出现了,集合的长度是可变的,内存空间随着数据得存入而逐渐得变大,能够很方便使用者,而不同的集合还有着不同的特点方法,对应不同的需要只需要选取不同的集合即可。以下是常见集合之间的继承关系图。
collection接口作为LIst与Set集合的父类接口,提供很多的通用方法供两个集合进行使用,以下就是此接口提供的方法。方向详细自行查看JavaAPI。
以上的方法,List与Set接口都是可以使用的。
List接口继承了Collection接口,因此包含了Collection接口的所有方法,此外还定义了两个重要的方法:
List接口,下面的继承类的底层实现一般分为两种:
ArrayList是Java中的一种数据结构,属于java.util包。它实现了List接口,并提供了用于操作数据的方法。ArrarList的底层代码实现是使用数组实现的,所以可以通过下标来找到指定元素。
主要特性:
常用方法:
示例:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 创建一个ArrayList对象
ArrayList<String> list = new ArrayList<String>();
// 添加元素到ArrayList
list.add("Element 1");
list.add("Element 2");
list.add("Element 3");
// 输出ArrayList的元素
for (String element : list) {
System.out.println(element);
}
}
}
在Java中,Set是一种集合,它用于存储不重复元素的集合。Set集合中的每个元素都是唯一的,它们按照自然顺序或者自定义顺序进行排序。 由于Set集合的底层实现是通过哈希表实现的,简略来说就是,由于哈希表在添加数据时,会通过哈希函数计算出哈希值,而哈希值是唯一的,而将哈希值作为该元素的下标,将元素存储在对应的位置下,那么如果添加两个重新的元素时,由于哈希值是一样的,那么该位置就会有元素存储,那么第二个元素就不能存储进哈希表中,以此来保证数据的唯一性。
Java中提供了几个实现Set接口的类,包括:
基本方法: 这些类都实现了Set接口,因此它们都具有Set的基本操作方法。
包括:
1、添加元素:使用add()方法将元素添加到Set集合中。
2、删除元素:使用remove()方法将元素从Set集合中删除。
3、包含元素:使用contains()方法检查Set集合是否包含指定元素。
4、获取元素数量:使用size()方法获取Set集合中元素的数量。
5、遍历元素:使用iterator()方法获取Set集合的迭代器,并使用迭代器遍历集合中的元素。
需要注意的是,由于Set集合中的元素是唯一的,因此如果尝试添加已经存在的元素,该操作将不会有任何效果。
HashSet类是Set接口的一个实现类,它使用哈希表(HashMap)来存储集合中的元素。HashSet类不保证集合中元素的顺序。此类允许使用null元素。
HashSet集合中的元素是无序的,即它们不会按照任何特定的顺序进行排列。
特性:
示例
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
// 创建一个新的HashSet集合
HashSet<String> set = new HashSet<>();
// 向集合中添加元素
set.add("Apple");
set.add("Banana");
set.add("Orange");
// 打印集合的内容
System.out.println("Set: " + set);
// 检查集合是否包含某个元素
System.out.println("Contains 'Apple': " + set.contains("Apple"));
// 删除一个元素
set.remove("Banana");
System.out.println("Set after removing 'Banana': " + set);
// 遍历集合
for (String item : set) {
System.out.println("Item: " + item);
}
}
}
注意:由于HashSet是无序的,因此每次迭代输出的顺序可能会不同。
Java的TreeSet是一种基于TreeMap实现的类,它是一个有序的、不包含重复元素的集合。TreeSet中的元素可以是任何排序的对象,例如Integer、String或自定义对象。自定义对象需要自定义排序方法。
特性 :
示例:
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// 创建一个新的TreeSet集合
TreeSet<Integer> set = new TreeSet<>();
// 向集合中添加元素
set.add(5);
set.add(3);
set.add(8);
set.add(1);
set.add(9);
// 打印集合的内容
System.out.println("Set: " + set);
// 检查集合是否包含某个元素
System.out.println("Contains 3: " + set.contains(3));
// 删除一个元素
set.remove(5);
System.out.println("Set after removing 5: " + set);
}
}
Java中的Map接口是一个关联数组,可以存储键-值对,其中键是唯一的。Map接口在java.util包中。
它的实现类包括HashMap、TreeMap、LinkedHashMap等。
Map接口内的常用方法:
只要实现了Map接口的类,那么以上的方法都是可以使用的。
HashMap是Java中Map接口的一种常用实现,它可以存储键值对,其中键是唯一的。
HashMap类在java.util包中。
常用方法:
小细节: 在HashMap的put方法添加新的键值对时,如果此时的键已经在HashMap中存在,那么put方法还是会执行成功,且将键值对的值进行替换,将旧的值返回,将新的值覆盖之前的值。
TreeMap是Java中Map接口的一种实现,它可以存储键值对,其中键是唯一的。TreeMap类在java.util包中。
TreeMap的底层实现是红黑树(Red-Black Tree),这是一种自平衡的二叉搜索树。
特点:
常用方法:
双列集合的选用:如果不需要键值对排序的话,使用HashMap的效率会比TreeMap的效率高,如果需要排序的话,那么使用TreeMap的效果会更好。