15、集合框架_ArrayList
一、为什么使用集合框架
Collection存放单一一个值, Map存放的是k-v键值对
二、Collection 接口
1、增加
接口是不能实例化的,我们这new ArrayList
add:要求必须传入的参数是Object对象,因此当写入基本数据类型的时候,包含了自动拆箱和自动装箱的过程
特点:
1、可以存放不同类型的数据,而数组只能存放固定类型的数据
2、当使用arraylist子类实现的时候,初始化的长度是10,当长度不够的时候会自动进行扩容操作
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); } }
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); ((ArrayList) collection).add(0,"aaa"); // 强制类型转换 System.out.println(collection); } }
addall(): 添加另一个集合的元素到此集合中
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); ((ArrayList) collection).add(0,"aaa"); System.out.println(collection); Collection collection1 = new ArrayList(); collection1.add("a"); collection1.add("b"); collection1.add("c"); collection1.add("d"); collection.addAll(collection1); System.out.println(collection); } }
2、删除
clear:只是清空集合中的元素,但是此集合对象并没有被回收
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); collection.clear(); System.out.println(collection); } }
remove:删除指定元素
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); collection.remove("a"); System.out.println(collection); } }
removeAll:删除集合元素
3、查询数据的方法
3.1、contains:判断集合中是否包含指定的元素值
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); ((ArrayList) collection).add(0,"aaa"); System.out.println(collection); Collection collection1 = new ArrayList(); collection1.add("a"); collection1.add("b"); collection1.add("c"); collection1.add("d"); collection.addAll(collection1); System.out.println(collection); System.out.println(collection.contains("a")); System.out.println(collection.containsAll(collection1)); } }
3.2、containsAll:判断此集合中是否包含另一个集合
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); ((ArrayList) collection).add(0,"aaa"); System.out.println(collection); Collection collection1 = new ArrayList(); collection1.add("a"); collection1.add("b"); collection1.add("c"); collection1.add("d"); collection.addAll(collection1); System.out.println(collection); System.out.println(collection.contains("a")); System.out.println(collection.containsAll(collection1)); } }
3.3、isEmpty:判断集合是否等于空
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); ((ArrayList) collection).add(0,"aaa"); System.out.println(collection); System.out.println(collection.contains("a")); System.out.println(collection.isEmpty()); } }
3.4、retainAll:若集合中拥有另一个集合的所有元素,返回true,否则返回false
public class CollectionDemo { public static void main(String[] args) { Collection collection = new ArrayList(); collection.add(1); collection.add(true); collection.add(1.23); collection.add("abc"); System.out.println(collection); ((ArrayList) collection).add(0,"aaa"); System.out.println(collection); Collection collection1 = new ArrayList(); collection1.add("a"); collection1.add("b"); collection1.add("c"); collection1.add("d"); collection.addAll(collection1); System.out.println(collection1.retainAll(collection)); } }
3.5、size:返回当前集合的大小
3.6、集合转换为数组 toArray
Object[] objects = collection.toArray();
.var回车自动补全类型
3、List与Set接口
▪ Collection 接口存储一组不唯一,无序的对象
▪ List 接口存储一组不唯一,有序(插入顺序)的对象
▪ Set 接口存储一组唯一,无序的对象
▪ Map接口存储一组键值对象,提供key到value的映射
4、List接口的实现类
▪ List特点:有序,不唯一(可重复)
▪ ArrayList实现了长度可变的数组,在内存中分配连续的空间。
– 优点:遍历元素和随机访问元素的效率比较高
– 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
▪ LinkedList采用链表存储方式。
– 优点:插入、删除元素时效率比较高
– 缺点:遍历和随机访问元素效率低下
List接口特有的方法:
public class ListDemo { public static void main(String[] args) { List list = new ArrayList(); list.add("a"); list.add(1); list.add("a"); list.add(true); System.out.println(list); // System.out.println(list.get(3)); System.out.println(list.indexOf("a")); System.out.println(list.lastIndexOf("a")); list.set(0,"aaa"); System.out.println(list); List list1 = list.subList(0, 2); System.out.println(list1); // List of = List.of(1,2,3,4); // System.out.println(of); } }
打印结果为:
/* [a, 1, a, true] 0 2 [aaa, 1, a, true] [aaa, 1] Process finished with exit code 0 */