java-Collection集合,List集合

àì夳堔傛蜴生んèń 2022-01-28 10:13 521阅读 0赞

集合数组

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDgxOTI0_size_16_color_FFFFFF_t_70

65.集合的由来和集合继承体系图

-集合的由来:数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少

-数组和集合的区别:

1:

*数组既可以存储基本数据类型,也可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值

*集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但在存储的时候会自动装箱为对象,100->new Integer(100)

2:

*数组的长度是固定的,不能自动增长

*集合的长度是可变的,可以根据元素的增加而增长

-集合和数组什么时候用:

  1. **\*如果元素个数是固定推荐用数组,因为当使用集合****时,由于集合也有通过数组实现的,所以在赋值时可能会产生大量垃圾,浪费内存**

*如果元素个数不是固定的推荐用集合

-集合继承体系图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDgxOTI0_size_16_color_FFFFFF_t_70 1

66.Collection集合的基本功能

-方法:

  1. **boolean add(E e) //向集合中添加元素(参数为object的任意对象)**

注:add方法如果是List集合一直会返回true,因为List集合是可以存储重复元素的,如果是Set集合存储重复元素就会返回false
boolean remove(Object o) //删除集合中的元素
void clear() //清空集合中的元素
boolean contains(Object o) //查看集合中是否包含指定元素,返回一个boolean值
boolean isEmpty() //判断集合是否为空
int size() //获取集合中元素的个数

-ArrayList的父类的父类重写toString方法,所以在打印对象引用的时候,输出的结果不是Object类中toString的结果

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. public class demo1 {
  5. public static void main(String[] args) {
  6. Collection c = new ArrayList(); //父类引用指向子类对象,编译看父类,运行看子类
  7. boolean b1 = c.add("abc");
  8. boolean b2 = c.add(true); //基本数据类型,会自动装箱,new Boolean(true);
  9. boolean b3 = c.add(123); //new Integer(123)
  10. boolean b4 = c.add(new Student("张三",23));
  11. System.out.println(c);
  12. }
  13. }

20181208172532901.png

67.集合的遍历

-遍历:其实就是依次获取集合中的每一个元素

-实现:将集合转换为数组,可以实现集合的遍历

方法:toArray(); //将集合转换为数组

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. public class demo2 {
  5. public static void main(String[] args) {
  6. demo1();
  7. Collection c = new ArrayList();
  8. c.add(new Student("张三",23)); //Object obj = new Student("张三",23); 向上转型 ,多态弊端无法使用子类特有的属性和方法
  9. c.add(new Student("李四",24));
  10. c.add(new Student("王五",25));
  11. c.add(new Student("赵六",26));
  12. Object[] arr = c.toArray(); //将集合转换为Object数组
  13. for (int i = 0; i < arr.length; i++) {
  14. //System.out.println(arr[i]); //它的作用只是为了显示
  15. Student s = (Student)arr[i]; //将obj向下转型为Student对象,这样就可以使用student中特有的属性和方法
  16. System.out.println(s.getName()+".."+s.getAge()); //这样不仅可以显示,还可以获取数据做其他操作
  17. }
  18. }
  19. private static void demo1() {
  20. Collection c = new ArrayList();
  21. c.add("a");
  22. c.add("b");
  23. c.add("c");
  24. c.add("d");
  25. Object[] arr = c.toArray();
  26. for (int i = 0; i < arr.length; i++) {
  27. System.out.println(arr[i]);
  28. }
  29. }
  30. }

20181208190054304.png

68.Collection集合中带All的方法测试

-方法:

  1. **boolean addAll(Collection c) //将整个集合添加为另一集合的元素中,合并
  2. boolean removeAll(Collection c) //删除的是交集
  3. boolean containsAll(Collection c) //判断一集合是否包含另一集合的元素,可以重复,但如果另一集合含有集合中不存在的元素,则返回fasle
  4. boolean retainAll(Collection c) //获取两个集合的交集,如果调用的集合改变就返回true,如果调用的集合不变就返回false**
  5. package Collection;
  6. import java.util.ArrayList;
  7. import java.util.Collection;
  8. public class demo3 {
  9. public static void main(String[] args) {
  10. addAll();
  11. removeAll();
  12. containsAll();
  13. Collection c1 = new ArrayList();
  14. c1.add("a");
  15. c1.add("b");
  16. c1.add("c");
  17. c1.add("d");
  18. Collection c2 = new ArrayList();
  19. c2.add("a");
  20. c2.add("b");
  21. c2.add("b");
  22. boolean b = c1.retainAll(c2);
  23. Collection c3 = new ArrayList();
  24. c3.add("a");
  25. c3.add("b");
  26. c3.add("c");
  27. c3.add("d");
  28. c3.add("e");
  29. c3.add("f");
  30. System.out.println("获取c1,c2中相同的元素,若c1改变,返回true若不变,返回false");
  31. System.out.println(b);
  32. System.out.println(c1);
  33. System.out.println("c3包含c1的全部元素,此时c1不变,返回false");
  34. boolean b2 = c1.retainAll(c3);
  35. System.out.println(b2);
  36. System.out.println(c1);
  37. }
  38. private static void containsAll() {
  39. Collection c1 = new ArrayList();
  40. c1.add("a");
  41. c1.add("b");
  42. c1.add("c");
  43. c1.add("d");
  44. Collection c2 = new ArrayList();
  45. c2.add("a");
  46. c2.add("b");
  47. c2.add("b");
  48. boolean b = c1.containsAll(c2);
  49. System.out.println("判断c1中是否含有c2中的所有元素,c2中的元素可以重复,但如果含有c1没有的元素,则返回false");
  50. System.out.println(b);
  51. System.out.println(c1);
  52. }
  53. private static void removeAll() {
  54. Collection c1 = new ArrayList();
  55. c1.add("a");
  56. c1.add("b");
  57. c1.add("c");
  58. c1.add("d");
  59. Collection c2 = new ArrayList();
  60. c2.add("a");
  61. c2.add("b");
  62. c2.add("3");
  63. boolean b = c1.removeAll(c2);
  64. System.out.println("获取两个集合的交集,若没有交集则返回false");
  65. System.out.println(b);
  66. System.out.println(c1);
  67. }
  68. private static void addAll() {
  69. Collection c1 = new ArrayList();
  70. c1.add("a");
  71. c1.add("b");
  72. c1.add("c");
  73. c1.add("d");
  74. Collection c2 = new ArrayList();
  75. c2.add("a");
  76. c2.add("b");
  77. c2.add("3");
  78. boolean b = c1.addAll(c2);
  79. System.out.println("将两个集合合并,并将结果返回给调用的集合");
  80. System.out.println(b);
  81. System.out.println(c1);
  82. }
  83. }

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDgxOTI0_size_16_color_FFFFFF_t_70 2

69.集合的遍历之迭代器遍历

-概述: 集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)

-迭代器:Iterator(接口)

-迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可

-方法:

*boolean hasnext() //如果仍有元素可以迭代,返回true

*next() //返回迭代的下一个元素


  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. public class demo4 {
  6. public static void main(String[] args) {
  7. demo1();
  8. Collection c = new ArrayList();
  9. c.add(new Student("张三",23)); //Object obj = new Student("张三",23); 向上转型 ,多态弊端无法使用子类特有的属性和方法
  10. c.add(new Student("李四",24));
  11. c.add(new Student("王五",25));
  12. c.add(new Student("赵六",26));
  13. Iterator it = c.iterator(); //获取迭代器
  14. while(it.hasNext()){
  15. Student s = (Student)it.next(); //将集合中的元素向下转型,由object对象转换为Student对象
  16. System.out.println(s.getName()+".."+s.getAge());
  17. }
  18. }
  19. private static void demo1() {
  20. Collection c = new ArrayList();
  21. c.add("a");
  22. c.add("b");
  23. c.add("c");
  24. c.add("d");
  25. Iterator it = c.iterator(); //获取迭代器
  26. while(it.hasNext()){
  27. System.out.println(it.next()); //指针会自动向后移动
  28. }
  29. }
  30. }

20181209170322669.png

70.List集合的特有功能概述

-概述:有序的Collection也称为序列,此接口的用户可以对列表中每个元素的插入位置进行精确的控制,用户可以根据元素的整数索引访问元素,并搜索列表中的元素。

-方法:

* void add(int index,E element) //在列表的指定位置插入元素
* E remove(int index) //删除指定位置的元素
* E get(int index) //根据索引获取指定元素
* E set(int index,E element) //修改指定位置的元素

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. public class demo5_List {
  6. public static void main(String[] args) {
  7. add();
  8. remove();
  9. get();
  10. set();
  11. }
  12. private static void set() {
  13. List list = new ArrayList();
  14. list.add("a");
  15. list.add("b");
  16. list.add("c");
  17. list.add("d");
  18. list.set(1, "x");
  19. System.out.println(list);
  20. }
  21. private static void get() {
  22. List list = new ArrayList();
  23. list.add("a");
  24. list.add("b");
  25. list.add("c");
  26. list.add("d");
  27. //利用迭代器遍历List集合
  28. Iterator it = list.iterator();
  29. while(it.hasNext()){
  30. System.out.println(it.next());
  31. }
  32. //通过索引遍历List集合
  33. for(int i=0;i<list.size();i++){
  34. System.out.print(list.get(i) +" ");
  35. }
  36. System.out.println();
  37. }
  38. private static void remove() {
  39. List list = new ArrayList();
  40. list.add("a");
  41. list.add("b");
  42. list.add("c");
  43. list.add("d");
  44. list.add(111);
  45. list.add(222);
  46. Object obj = list.remove(1); //返回删除的元素,根据索引删除指定元素
  47. //Object obj1 = list.remove(111); //参数不能为数字,将数字当成了索引,所以会报错
  48. System.out.println(obj);
  49. System.out.println(list);
  50. }
  51. private static void add() {
  52. List list = new ArrayList();
  53. list.add("a");
  54. list.add("b");
  55. list.add("c");
  56. list.add("d");
  57. list.add(4, "e"); //index<=size ,且index>=0都不会触发异常
  58. //list.add(10,"e"); IndexOutOfBoundsException索引越界异常
  59. System.out.println(list);
  60. }
  61. }

20181209193218971.png

-List集合的遍历

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. public class demo6 {
  6. public static void main(String[] args) {
  7. List list = new ArrayList();
  8. list.add(new Student("张三",23));
  9. list.add(new Student("李四",24));
  10. list.add(new Student("王五",25));
  11. list.add(new Student("赵六",26));
  12. //利用get方法遍历
  13. for (int i = 0; i < list.size(); i++) {
  14. //System.out.println(list.get(i));
  15. Student s = (Student)list.get(i);
  16. System.out.println(s.getName()+".."+s.getAge());
  17. }
  18. System.out.println();
  19. //利用迭代器遍历
  20. Iterator it = list.iterator();
  21. while(it.hasNext()){
  22. Student s = (Student)it.next(); //将obj对象向下转型,这样就可以使用student类中特有的属性和方法
  23. System.out.println(s.getName()+".."+s.getAge());
  24. }
  25. }
  26. }

20181209194310570.png

-并发修改异常产生的原因及解决方案

-ListIterator接口:系列表迭代器,允许按任一方法遍历集合,迭代期间修改列表,接口中有add方法,可以在迭代期间向列表添加元素,而不触发并发修改异常(ConcurrentModificationException)的错误

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.ListIterator;
  6. public class demo7_listIterator {
  7. public static void main(String[] args){
  8. List list = new ArrayList();
  9. list.add("a");
  10. list.add("b");
  11. list.add("hello");
  12. list.add("c");
  13. list.add("d");
  14. /*Iterator it= list.iterator(); //获取迭代器
  15. while (it.hasNext()) { //判断集合是否有元素
  16. String s = (String)it.next(); //向下转型
  17. if("hello".equals(s)){ //如果集合中含有"hello"字符串,就向集合中添加world
  18. list.add("wolrd"); //遍历的同时再增加元素,不允许在遍历期间修改集合,触发ConcurrentModificationException异常(并发修改异常)
  19. }
  20. }*/
  21. ListIterator lit = list.listIterator();
  22. while (lit.hasNext()) { //判断集合是否有元素
  23. String s = (String)lit.next(); //向下转型
  24. if("hello".equals(s)){ //如果集合中含有"hello"字符串,就向集合中添加world
  25. lit.add("wolrd"); //调用 ListIterator接口中的add方法,允许再遍历期间修改集合
  26. }
  27. }
  28. System.out.println(list);
  29. }
  30. }

20181210130418767.png

-ListIterator接口功能

  1. **\* boolean hasNext() 是否有下一个
  2. \* boolean hasPrevious() 是否有前一个
  3. \* Object next() 返回下一个元素
  4. \* Object previous() 返回上一个元素**

71.Vector接口的概述

-概述:实现了List接口,功能被ArrayList取代

-特有功能:

未实现List接口时,Vector通过枚举来遍历获取集合中的值

*void addElement(obj E) 添加元素

-Enumeration 枚举对象,实现枚举功能

*hasMoreElements() 测试此枚举是否包含更多的元素

*nextElement() 如果还有下一个对象,返回下一个元素

  1. package Collection;
  2. import java.util.Enumeration;
  3. import java.util.Vector;
  4. public class demo8_Vector {
  5. public static void main(String[] args) {
  6. Vector v = new Vector();
  7. v.addElement("a");
  8. v.addElement("b");
  9. v.addElement("c");
  10. v.addElement("d");
  11. Enumeration en = v.elements(); //获取枚举
  12. while(en.hasMoreElements()){ //判断是否有元素
  13. System.out.println(en.nextElement()); //输出集合中的所有元素
  14. }
  15. }
  16. }

72.List的三个子类

-数组与链表的比较:
数组:查询快修改也快

增加和删除慢

链表:查询慢修改也慢

增加和删除快

-ArrayList,LinkList,Vector的比较:

*ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
*Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
*1.Vector相对ArrayList查询慢(线程安全的)
*2.Vector相对LinkedList增删慢(数组结构)
*LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
*Vector和ArrayList的区别:
Vector是线程安全的,效率低
ArrayList是线程不安全的,效率高
共同点:都是数组实现的
*ArrayList和LinkedList的区别
ArrayList底层是数组结果,查询和修改快
LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
共同点:都是线程不安全的

73.ArrayList去重

-思路:1.创建新集合接收老集合中不重复的值

2.获取老集合中的迭代器

3.遍历老集合

4.通过新集合是否包含老集合中的元素,如果包含就不添加,不包含就添加

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. public class demo9_ArrayList去重 {
  6. public static void main(String[] args) {
  7. ArrayList list = new ArrayList();
  8. list.add("a");
  9. list.add("a");
  10. list.add("a");
  11. list.add("b");
  12. list.add("b");
  13. list.add("b");
  14. list.add("c");
  15. list.add("c");
  16. list.add("b");
  17. ArrayList li = method(list);
  18. System.out.println(li);
  19. }
  20. public static ArrayList method(ArrayList list){
  21. ArrayList al = new ArrayList(); //创建新集合
  22. Iterator it = list.iterator(); //获取传入集合的迭代器
  23. while(it.hasNext()){
  24. Object obj = it.next(); //取得集合中每一个元素
  25. if(!al.contains(obj)){ //如果新集合不包含obj,就添加
  26. al.add(obj);
  27. }
  28. }
  29. return al;
  30. }
  31. }

-自定义类实现去重

-注意点:Contains方法和remove方法底层是通过equals方法实现的,如果自定义类没有重写equals方法的话,就会调用object类的equals方法,此时比较的是对象的地址值。

  1. package Collection;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. public class demo9_ArrayLIst2 {
  5. public static void main(String[] args) {
  6. ArrayList list = new ArrayList();
  7. list.add(new Student("张三",23));
  8. list.add(new Student("张三",23));
  9. list.add(new Student("张三",25));
  10. list.add(new Student("李四",24));
  11. list.add(new Student("李四",24));
  12. ArrayList al = method(list);
  13. System.out.println(al);
  14. }
  15. public static ArrayList method(ArrayList list){
  16. ArrayList aList = new ArrayList(); //创建新集合
  17. Iterator it = list.iterator();
  18. while(it.hasNext()){
  19. Object obj = it.next();
  20. if(!aList.contains(obj)){ //Contains底层是通过equals实现的,如果自定义类没有重写equals方法,就会自动调用object类的equals方法,此时比较的是地址值
  21. aList.add(obj);
  22. }
  23. }
  24. return aList;
  25. }
  26. }
  27. Student类:
  28. @Override //重写equals方法
  29. public boolean equals(Object obj) {
  30. Student s = (Student)obj;
  31. return this.name.equals(s.name) && this.age == s.age;
  32. }

20181211133136865.png

75.LinkedList的概述及使用

-概述:List接口的链表形式实现

-链表:查询和修改慢,增加和删除快,因为链表的每一个元素(除开头和结尾外)都保留着它前一个元素和后一个元素的地址,这样就可以以链的形式连接,但查询时,只能从头或从尾依次查找,直至找到,所以查询慢,而删除时只要将两个元素之间的链去掉即可。

-方法:

* public void addFirst(E e)及addLast(E e) //在链的头部或尾部添加元素
* public E getFirst()及getLast() //获取链的头部或尾部的元素
* public E removeFirst()及public E removeLast() //删除链的头部或尾部的元素
* public E get(int index) //获取指定索引的元素,由(index和size/2)比较,判断应从头部还是尾部开始查找

-用LinkedList模拟栈数据结构

  1. package Collection;
  2. import java.util.LinkedList;
  3. public class demo11_stack {
  4. private LinkedList list = new LinkedList();
  5. public static void main(String[] args) {
  6. demo11_stack d = new demo11_stack();
  7. d.inStack("a");
  8. d.inStack("b");
  9. d.inStack("c");
  10. d.inStack("d");
  11. while(!d.isEmpty()){
  12. System.out.println(d.outStack());
  13. }
  14. }
  15. public void inStack(Object obj){
  16. list.addFirst(obj);
  17. }
  18. public Object outStack(){
  19. return list.removeFirst();
  20. }
  21. public boolean isEmpty(){
  22. return list.isEmpty();
  23. }
  24. }

77.增强for**概述及其使用**

-概述:简化数组及Collection集合的遍历(底层用迭代器实现)

-格式:

  1. **for(元素数据类型 变量 : 数组或者Collection集合) \{
  2. 使用变量即可,该变量就是元素
  3. \}**
  4. package generic;
  5. import java.util.ArrayList;
  6. public class demo5_foreach {
  7. public static void main(String[] args) {
  8. int arr[] = {11,22,33,44,55};
  9. for (int i : arr) {
  10. System.out.println(i);
  11. }
  12. ArrayList< String > list = new ArrayList<>();
  13. list.add("a");
  14. list.add("b");
  15. list.add("c");
  16. list.add("d");
  17. for (String string : list) {
  18. System.out.println(string);
  19. }
  20. }
  21. }

78.三种迭代的能否删除

  1. package generic;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. public class demo6 {
  5. public static void main(String[] args) {
  6. ArrayList<String> list = new ArrayList<>();
  7. list.add("a");
  8. list.add("b");
  9. list.add("b");
  10. list.add("c");
  11. list.add("d");
  12. //for 循环遍历删除指定元素
  13. /*for (int i = 0; i < list.size(); i++) {
  14. if("b".equals(list.get(i))){ //找到"b"
  15. list.remove(i--); //删除"b",并使索引回退一位,因为当删除一个元素时,list的size会减少一位,此时如果i的索引不减一的话,就会跳过删去元素的下一位元素
  16. }*/
  17. //迭代器循环遍历删除指定元素
  18. /*Iterator<String> it = list.iterator();
  19. while (it.hasNext()) {
  20. if("b".equals(it.next())){
  21. it.remove();
  22. //list.remove("b"); 不能用集合的修改方法,因为会出现并发修改异常
  23. }
  24. }*/
  25. //foreach循环遍历删除(不可以)因为foreach底层依赖迭代器实现
  26. /*for (String string : list) {
  27. if("b".equals(string)){
  28. list.remove("b"); //并发修改异常,不能删除指定元素
  29. }
  30. }*/
  31. }
  32. }

79.静态导入

-概述:静态导入类方法

-格式:import static 包名… 类名.方法名

可以直接导入到方法的级别

-注意事项:方法必须是静态的,但如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。

80.可变参数

-概述:当定义方法的时候不知道应该定义多少个参数

-格式:

*修饰符 返回值类型 方法名(数据类型 … 变量名){}

-注意事项:

*这里的可变参数其实是一个数组

*如果一个方法有可变参数,并且还有多个参数,可变参数肯定是最后一个

  1. package generic;
  2. public class demo7_changeableargs {
  3. public static void main(String[] args) {
  4. String[] arr = {"a","b","c","d"};
  5. method("s1","z","x","y");
  6. }
  7. public static void method(String s1,String ... arr1){
  8. for (String string : arr1) {
  9. System.out.println(string);
  10. }
  11. }
  12. }

81.asList方法

-功能:将数组转换成集合

-注意:

*数组转换成集合后不能增加或删除元素,但是可以用集合的思想来操作数组,也就是说可以使用其他集合里的方法

  1. \***基本数据类型转数组,会将整个数组转化为一个对象**

*将数组转化为集合,数组必须是引用数据类型

  1. package Arrays;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. public class demo2_asList {
  6. public static void main(String[] args) {
  7. Integer[] arr = {11,11,22,33,33,44,44,55};
  8. List<Integer> list = Arrays.asList(arr);
  9. System.out.println(list); //数组转集合只能是引用数据类型
  10. listtoarray();
  11. }
  12. private static void listtoarray() {
  13. ArrayList<String> list = new ArrayList<>();
  14. list.add("a");
  15. list.add("b");
  16. list.add("c");
  17. list.add("d");
  18. String[] arr = list.toArray(new String[5]); //当集合转数组时,数组的长度如果<=size,转换后的数组长度等于集合的size,如果>size,那么数组的长度就和你指定的长度一样
  19. for (String string : arr) {
  20. System.out.println(string);
  21. }
  22. }
  23. }

82.集合中嵌套集合

  1. package Collection;
  2. import java.util.ArrayList;
  3. public class demo12 {
  4. public static void main(String[] args) {
  5. ArrayList<ArrayList<Student>> list = new ArrayList<>();
  6. ArrayList<Student> First = new ArrayList<>();
  7. First.add(new Student("张三",23));
  8. First.add(new Student("李四",24));
  9. First.add(new Student("王五",25));
  10. ArrayList<Student> Second = new ArrayList<>();
  11. Second.add(new Student("赵六",26));
  12. Second.add(new Student("周七",27));
  13. Second.add(new Student("潘八",28));
  14. list.add(First);
  15. list.add(Second);
  16. for (ArrayList<Student> as :list ) {
  17. System.out.println(as);
  18. for (Student s : as) {
  19. System.out.println(s);
  20. }
  21. }
  22. }
  23. }

发表评论

表情:
评论列表 (有 0 条评论,521人围观)

还没有评论,来说两句吧...

相关阅读

    相关 List集合

    一、list集合介绍: ![82fbb494afcdf3b9ee11beeb7727dbc2.png][] 在Collection中,List集合是有序的,可对其中每个元素

    相关 List集合

    List是Java集合框架中最常用的集合类型之一,它允许我们存储有序的元素集合,通过索引可以轻松访问和操作这些元素。 List是一个接口,Java提供了多个实现List接口的类

    相关 集合---List

    1.集合主要用于存储类的对象 Collection下有三个子接口,分别是List、 Queue和set,List和 Queue中可以存储有序且重复的数据,Set中存储的数

    相关 List集合

    介绍 > List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许加入重复元素,因为它可以通过索引来访问指定位置的集合元素。Lis