目录
Java集合框架主要接口
Java集合框架主要实现类:
1.ArrayList类
2.LinkedList类
3.Vector类
4.HashSet类
5.TreeMap类
Java集合框架是Java编程语言提供的一组接口,用于处理对象集合。Java集合框架中包括了一系列的接口、实现类和算法,可以方便地操作和管理各种类型的集合数据。
Collection接口:是所有集合接口的根接口,提供了基本的集合操作,如添加、删除、遍历等操作。
List接口:是Collection接口的子接口,提供了有序的集合,可以通过索引访问集合中的元素。
Set接口:也是Collection接口的子接口,提供了无序的集合,集合中不允许有重复元素。
Map接口:是一个映射接口,提供了一种将键映射到值的方式,可以通过键来访问值。
框架体系图:
基本使用示例:
List list = new ArrayList(10); //创建一个ArrayList集合(接口),集合的初始容量为10;若未给集合设置容量,默认容量为10
list.add("张三"); //新增一个元素到集合的最后面
list.add(1,"李四"); //新增一个元素到集合的指定下标(1)
//将一个集合中的所有元素追加到另一个集合的后面
List list2 = new ArrayList();
list2.add("王五");
list2.add("赵六");
list2.add("小七");
list .addAll(list2); //将list2(集合)中的所有元素追加到list(集合)中;也可多加一个下标,就是将list2(集合)的所有元素添加到list(集合)中的指定下标位置,例如:list.addAll(1,list2);
for (Object name: list //循环遍历list集合中的所有元素
) {
System.out.println(name);
}
控制台:
特点如下:
基本使用示例:
LinkedList list = new LinkedList(); //创建一个LinkedList集合(接口)
list.add("a"); //将指定元素(a)追加到此列表(list)的末尾
list.add(1, "b"); //在此列表(list)中的指定下标位置(1)插入指定的元素(b)
LinkedList list2 = new LinkedList(); //创建另一个LinkedList集合
list2.add(123); //初始一个数据
list.addAll(list2); //将指定集合(list2)中的所有元素追加到此列表(list)的末尾
LinkedList list3 = new LinkedList(); //创建另一个LinkedList集合
list3.add(456); //初始一个数据
list.addAll(1, list3); //将指定集合(list3)中的所有元素插入到此列表(list)中,从指定的下标位置(1)开始
list.addFirst("c"); //新增一个元素到集合的第一个位置
list.addLast("d"); //新增一个元素到集合的最后一个位置
boolean isIn = list.contains("a"); //如果此列表(list)包含指定元素(a),则返回true,反之返回false
System.out.println(isIn);
for (Object info:list //循环遍历list集合中的所有元素
) {
System.out.println(info);
}
控制台:
特点如下:
基本使用示例:
Vector vector = new Vector(10, 3); //创建Vector集合容量为10,容量增量的空向量为3
vector.add("张三"); //新增一个指定元素到Vector的末尾
vector.add(1, "李四"); //新增一个指定元素到Vector的指定下标位置
vector.addElement(6);
System.out.print("第一个元素:" + vector.get(1));
System.out.println("返回克隆:" + vector.clone()); //返回此向量的克隆
Object[] ojb = new Object[5];
vector.copyInto(ojb); //将集合中的所有元素复制到指定数组(ojb)中
for (Object info:ojb
) {
System.out.println(info);
}
控制台:
特点如下:
Vector是一个可以自动增长和缩小的动态数组,它能够存储任意数据类型的对象。
Vector是单线程,所以线程是安全的,在多线程环境下,可以通过synchronized关键字来保证Vector中的操作是原子性的。
Vector实现了List接口,因此它可以使用List中定义的方法,如:add()、remove()、get()等。
Vector中的元素可以通过索引来访问和修改,索引的范围从0到size()-1。
Vector中的元素可以重复,也可以为null值。
Vector在添加或删除元素时,如果容量不足会自动增长容量,以保证元素能够全部存储。
Vector还提供了一些其他的方法,如:capacity()、ensureCapacity()、setSize()等。
基本使用示例:
Map list = new HashMap(); //创建一个Map集合(接口),键指定为Integer类型,值指定为String类型
//在集合中新增三个键值对
list.put(1, "张三");
list.put(2, "李四");
list.put(3, "王五");
//获取一个键的值
System.out.println(list.get(1));
Set set = list.keySet(); //获取所有的键并存储到集合(Set)中
for (Object info:set
) {
System.out.println("键:" + info + "\t\t值:" + list.get(info));
}
控制台:
特点如下:
HashSet实现了Set接口,因此它不能包含重复的元素;HashSet也是一个无序的集合,并不能保证元素的顺序。
HashSet使用哈希表来存储元素,因此它可以快速地进行添加、删除、查找等操作。
HashSet不是线程安全的,如果多个线程同时操作同一个HashSet实例,可能会导致意想不到的结果。
HashSet可以包含null元素,但只能包含一个null元素。
基本使用示例:
TreeMap map = new TreeMap<>(Comparator.reverseOrder());
map.put(3, "val");
map.put(2, "val");
map.put(1, "val");
map.put(5, "val");
map.put(4, "val");
System.out.println(map);
控制台:
特点如下:
TreeMap是一个有序的集合,它根据键的自然顺序进行排序,或按照构造函数中提供的Comparator进行排序。
TreeMap中不允许存储重复的键。如果试图添加已经存在的键,它将会覆盖之前的值。
TreeMap实现了SortedMap接口,因此它可以使用SortedMap中定义的方法,如:firstKey()、lastKey()、subMap()等。
TreeMap使用红黑树来存储元素,因此它可以快速地进行添加、删除、查找等操作,时间复杂度为O(log n)。
TreeMap不是线程安全的,如果多个线程同时操作同一个TreeMap实例,可能会导致意想不到的结果。
TreeMap可以包含null键,但不可以包含null值。
在Java集合框架中还包括了一些算法,如排序算法和查找算法。
Java集合框架提供了非常强大的功能,可以方便地进行各种集合操作,大大提高了Java程序的开发效率。