帮助我们建立类型安全的集合

本质

数据类型的参数化
我们可以把 泛型 理解为数据类型的一个 占位符(形式参数) ,即告诉 编译器 在调用泛型时必须传入实际类型
image.png

Collection接口_List接口_ArrayList常用方法

image.png
add() 向容器中添加元素
size() 返回元素个数
contains() 判断元素是否存在
remove() 容器中存放的是地址,移除的时候是把 地址 删掉,但是对象还是存在
clear() 移除所有元素

  1. package sc.sxt.collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. /**
  5. * 测试Collection接口中的方法
  6. *
  7. * @author DYQ
  8. *
  9. */
  10. public class TestList {
  11. public static void main(String[] args) {
  12. Collection c = new ArrayList<>();
  13. System.out.println(c.size()); // 0
  14. System.out.println(c.isEmpty()); // true
  15. //add()向容器中添加元素
  16. c.add("高老大");
  17. c.add("高老二");
  18. System.out.println(c); // [高老大, 高老二]
  19. //size() 返回元素个数
  20. System.out.println(c.size()); // 2
  21. //contains() 判断元素是否存在
  22. System.out.println(c.contains("高老大"));// true
  23. System.out.println(c.contains("高老五"));// false
  24. Object[] objs = c.toArray();
  25. System.out.println(objs); // [Ljava.lang.Object;@4c203ea1
  26. c.remove("高老二"); //// 容器中存放的是地址,移除的时候是把地址删掉,但是对象还是存在
  27. System.out.println(c); // [高老大]
  28. c.clear(); // 移除所有元素
  29. System.out.println(c); // []
  30. }
  31. }

操作多个List_并集和交集(多个容器操作

addAll() 将另一个集合中所有元素都加进来
removeAll() 删除两个集合相同的部分
retainAll() 取交集
list01.containsAll(list02) 1的集合是否包含2集合中所有的元素

  1. package sc.sxt.collection;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class TestList01 {
  5. public static void main(String[] args) {
  6. text02();
  7. }
  8. public static void text02() {
  9. List<String> list01 = new ArrayList<>();
  10. //Collection <String> list01 = new ArrayList<>();
  11. list01.add("aa");
  12. list01.add("bb");
  13. list01.add("cc");
  14. List<String> list02 = new ArrayList<>();
  15. list02.add("aa");
  16. list02.add("dd");
  17. list02.add("ee");
  18. System.out.println("list01:" + list01);// list01:[aa, bb, cc]
  19. // addAll()将另一个集合中所有元素都加进来
  20. // list01.addAll(list02);
  21. // System.out.println("list01.addAll:" + list01);
  22. // list01:[aa, bb, cc, aa, dd, ee]
  23. // removeAll()删除两个集合相同的部分
  24. // list01.removeAll(list02);
  25. // System.out.println("list01.removeAll:" + list01);
  26. // list01.removeAll:[bb, cc]
  27. // 取交集
  28. // list01.retainAll(list02);
  29. // System.out.println("list01.retainAll:" + list01); //list01.retainAll:[aa]
  30. // list01.containsAll(list02) 1的集合是否包含2集合中所有的元素
  31. System.out.println(list01.containsAll(list02)); //false
  32. }
  33. }

List list01 = new ArrayList<>();
//Collection list01 = new ArrayList<>();
List可以换成Collection

索引和顺序相关方法

List 是有序、可重复的容器
有序 :List每个元素都有索引标记,可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素
可重复 :List允许加入重复的元素。更确切的讲,List通常允许满足e1.equals(e2)的元素重复加入容器

List接口的实现类有三个:ArrayList、LinkedList、Vector

add(int index , E e) 在索引位置处添加一个新的元素
remove(int index) 将某个位置的元素删除
set(int index , E e) 将某个位置的元素替换(修改)成另一个元素
get(int index) 返回某个位置的元素

indexOf(E e) 返回第一个符合的元素的位置
lastIndexOf(E e) 返回最后一个符合的元素的位置

  1. package sc.sxt.collection;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class TestList01 {
  5. public static void main(String[] args) {
  6. text03();
  7. }
  8. public static void text03() {
  9. List<String> list = new ArrayList<String>();
  10. list.add("A");
  11. list.add("B");
  12. list.add("C");
  13. list.add("D");
  14. System.out.println(list);// [A, B, C, D]
  15. // 在索引位置处添加一个新的元素
  16. list.add(2, "dyq");
  17. System.out.println(list);// [A, B, dyq, C, D]
  18. // 将某个位置的元素删除
  19. list.remove(2);
  20. System.out.println(list);// [A, B, C, D]
  21. // 将某个位置的元素替换(修改)成另一个元素
  22. list.set(2, "高老二");
  23. System.out.println(list); // [A, B, 高老二, D]
  24. // 返回某个位置的元素
  25. System.out.println(list.get(2)); // 高老二
  26. list.add("C");
  27. list.add("B");
  28. list.add("A");
  29. System.out.println(list); // [A, B, 高老二, D, C, B, A]
  30. // 返回第一个符合的元素的位置
  31. System.out.println(list.indexOf("B")); // 1
  32. //返回最后一个符合的元素的位置
  33. System.out.println(list.lastIndexOf("B")); //5
  34. }
  35. }

Collections工具类

和Collection接口是两码事C
Collections.shuffle(list); // 随机排列list中的元素
Collections.reverse(list); // 逆序排序
Collections.sort(list); // 按照递增方式排序。
Collections.binarySearch(list, “张三”); 二分法查找是否有某个元素,没找到就返回一个负的索引值

  1. package sc.sxt.collection;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.List;
  5. /**
  6. * Collections辅助类使用
  7. *
  8. * @author DYQ
  9. *
  10. */
  11. public class TestCollections {
  12. public static void main(String[] args) {
  13. List<String> list = new ArrayList<String>();
  14. for (int i = 0; i < 10; i++) {
  15. list.add("gao:" + i);
  16. }
  17. System.out.println(list);
  18. Collections.shuffle(list); // 随机排列list中的元素
  19. System.out.println(list);
  20. Collections.reverse(list); // 逆序排序
  21. System.out.println(list);
  22. Collections.sort(list); // 按照递增方式排序。
  23. System.out.println(list);
  24. // 二分法查找是否有某个元素
  25. System.out.println(Collections.binarySearch(list, "张三")); // -11
  26. // 没找到就返回一个负的索引值
  27. System.out.println(Collections.binarySearch(list, "gao:1")); //1
  28. }
  29. }
  30. [gao:0, gao:1, gao:2, gao:3, gao:4, gao:5, gao:6, gao:7, gao:8, gao:9]
  31. [gao:0, gao:1, gao:6, gao:3, gao:9, gao:4, gao:8, gao:2, gao:7, gao:5]
  32. [gao:5, gao:7, gao:2, gao:8, gao:4, gao:9, gao:3, gao:6, gao:1, gao:0]
  33. [gao:0, gao:1, gao:2, gao:3, gao:4, gao:5, gao:6, gao:7, gao:8, gao:9]
  34. -11
  35. 1