1.集合

1. 集合的引入
需求:我有3个学生,请把这个3个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。

public class TestDemo01 {public static void main(String[] args) {Student[] students = new Student[3];students[0] = new Student("伊泽瑞尔",15);students[1] = new Student("皮城女警",22);students[2] = new Student("VN",32);for (int i = 0; i < students.length; i++) {Student student = students[i];System.out.println(student.getName() + "==" + student.getAge());}}
}class Student{private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

弊端:数组作为容器,可以存储元素,但是数组作为容器,使用起来不是那么方便,比如我们要对数组进行增删,就不方便。因为数组一旦定义,长度就固定了,在途中对数组进行增删,就会改变数组长度,编译就会报错。所以,引入了集合的概念
2. 集合与数组的区别
(1)相同点:都可以作为容器,都可以存储元素
(2)不同点

  • 数组的长度是固定的,集合的长度不固定
  • 数组不仅可以存储基本类型,也可以存储引用类型。集合只可以存储引用类型
  • 数组作为容器,只可以存储同一种数据类型。集合可以存储多种数据类型

2.Collection集合

1. Collection集合的概述:所有集合的跟接口

2. Collection集合的功能

(1)添加功能

  • boolean add(Object o):向集合中添加一个元素
  • boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素)
import java.util.ArrayList;
import java.util.Collection;public class TestDemo01 {public static void main(String[] args) {//多态Collection list1 = new ArrayList();boolean b1 = list1.add(100);boolean b2 = list1.add(200);System.out.println(b1);   //trueSystem.out.println(b2);   //trueCollection list2 = new ArrayList();boolean b3 = list2.add(300);boolean b4 = list2.add(400);System.out.println(b3);   //trueSystem.out.println(b4);   //true//将list2中的元素放入list1boolean b5 = list1.addAll(list2);System.out.println(b5);   //trueSystem.out.println(list1);   //[100, 200, 300, 400]System.out.println(list2);   //[300, 400]}
}====================================================================import java.util.ArrayList;
import java.util.Collection;//向集合中存储引用数据类型
public class TestDemo02 {public static void main(String[] args) {Collection collection = new ArrayList();collection.add("德玛西亚");collection.add(new Integer(100));   //自动装箱collection.add(Integer.valueOf(200));collection.add(3.14);collection.add(new Student("VN",22));System.out.println(collection);   //[德玛西亚, 100, 200, 3.14, Student{name='VN', age=22}]}
}class Student{private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

(2)删除功能

  • void clear():删除所有元素
  • boolean remove(Object o):移除一个元素
  • boolean removeAll(Collection c):移除一个集合的元素(移除一个以上则返回true),删除的元素是两个集合的交集元素。如果没有交集元素,则返回false
import java.util.ArrayList;
import java.util.Collection;public class TestDemo04 {public static void main(String[] args) {Collection collection = new ArrayList();collection.add("德玛西亚");collection.add(200);collection.add(3.14);collection.add("java");System.out.println(collection);   //[德玛西亚, 200, 3.14, java]boolean b1 = collection.remove(200);System.out.println(b1);    //trueSystem.out.println(collection);    //[德玛西亚, 3.14, java]collection.clear();System.out.println(collection);   //[]}
}===============================================================import java.util.ArrayList;
import java.util.Collection;public class TestDemo03 {public static void main(String[] args) {Collection collection1 = new ArrayList();collection1.add(100);collection1.add(200);collection1.add(300);collection1.add(400);Collection collection2 = new ArrayList();collection2.add(100);collection2.add(200);collection2.add(500);collection2.add(600);boolean b = collection1.removeAll(collection2);System.out.println(b);    //trueSystem.out.println(collection1);   //[300, 400]System.out.println(collection2);   //[100, 200, 500, 600]}
}

(3)判断功能

  • boolean contains(Object o):判断集合中是否包含指定元素
  • boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(这个集合 包含 另一个集合中所有的元素才算包含 才返回true)
  • boolean isEmpty():判断集合是否为空
import java.util.ArrayList;
import java.util.Collection;public class TestDemo05 {public static void main(String[] args) {Collection collection1 = new ArrayList();collection1.add(123);collection1.add(234);collection1.add(345);collection1.add(456);boolean b1 = collection1.contains(234);System.out.println(b1);    //trueCollection collection2 = new ArrayList();collection2.add(123);collection2.add(456);//判断collection1里面是否包含collection2的全部元素boolean b2 = collection1.containsAll(collection2);System.out.println(b2);   //trueboolean b3 = collection1.isEmpty();System.out.println(b3);   //false}
}

(4)遍历/获取功能(迭代器)【重点】

  • Iterator iterator():返回在此collection的元素上进行迭代的迭代器
  • Iterator中的方法:
    ①boolean hasNext():判断还有没有下一个元素可以迭代
    ②E next():返回迭代的下一个元素
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class TestDemo01 {public static void main(String[] args) {Collection collection = new ArrayList();collection.add(123);collection.add(234);collection.add(345);collection.add(456);Iterator iterator = collection.iterator();while (iterator.hasNext()) {Object o = iterator.next();System.out.println(o);    //123  234  345  456}}
}====================================================================import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class TestDemo02 {public static void main(String[] args) {Collection collection = new ArrayList();collection.add(new Student(22,"VN"));collection.add(new Student(18,"EZ"));collection.add(new Student(33,"MF"));Iterator iterator = collection.iterator();while (iterator.hasNext()) {Object o = iterator.next();Student stu = (Student) o;   //必须向下转型,不然无法使用Student类中的方法System.out.println(stu.getName() + "==" + stu.getAge());   //VN==22    EZ==18    MF==33}}
}class Student{private int age;private String name;public Student() {}public Student(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student{" +"age=" + age +", name='" + name + '\'' +'}';}
}

(5)获取长度的功能

  • int size():获取该集合的长度
  • 区别:
    ①length:属性,用于获取数组的长度
    ②length():方法,用于获取字符串长度
    ③size():方法,用于获取集合元素个数
import java.util.ArrayList;
import java.util.Collection;public class TestDemo03 {public static void main(String[] args) {int[] arr = {11,22,33,44,55};System.out.println(arr.length);   //5String str = "HelloJava";System.out.println(str.length());   //9Collection collection = new ArrayList();collection.add(111);collection.add(222);collection.add(333);collection.add(444);System.out.println(collection.size());    //4}
}

(6)获取交集的功能

  • boolean retainAll(Collection o) :获取两个集合的交集。
import java.util.ArrayList;
import java.util.Collection;public class TestDemo04 {public static void main(String[] args) {Collection collection1 = new ArrayList();collection1.add(11);collection1.add(22);collection1.add(33);collection1.add(44);Collection collection2 = new ArrayList();collection2.add(33);collection2.add(44);collection2.add(55);collection2.add(66);//collection1会剩下两个集合的交集部分,collection2不发生改变//如果有重合的地方(collection1改变),则返回true,如果没有重合的地方(collection1不发生改变),则返回falseboolean b = collection1.retainAll(collection2);System.out.println(b);   //trueSystem.out.println(collection1);   //[33, 44]System.out.println(collection2);   //[33, 44, 55, 66]}
}

(7)集合转换为数组的功能

  • Object[] toArray():集合转换为数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;public class TestDemo05 {public static void main(String[] args) {Collection collection = new ArrayList();collection.add(123);collection.add(234);collection.add(345);collection.add(456);System.out.println(collection);   //[123, 234, 345, 456]//不使用toArray()方法Integer[] arr = new Integer[collection.size()];Iterator iterator = collection.iterator();int i = 0;while (iterator.hasNext()) {Object o = iterator.next();Integer num = (Integer) o;arr[i] = num;i++;}System.out.println(Arrays.toString(arr));  //[123, 234, 345, 456]System.out.println("=========================");//使用toArray()方法Object[] obj = collection.toArray();System.out.println(Arrays.toString(obj));   //[123, 234, 345, 456]}
}

3. List集合

1. List集合的概述:Collection接口的子接口
2. List集合的特点:元素有序,且每一个元素都有索引,元素可以重复
3. List集合特有的方法
(1)void add(int index,E element):在指定索引处添加索引
(2)E get(int index):获取指定索引处的元素
(3)int indexOf(Object o):返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1
(4)int lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1
(5)E remove(int index):移除指定索引处的元素【注意:返回的是被移除的元素】
(6)E set(int index,E element):替换指定索引处的元素【注意:返回的是被替换的元素】
(7)List subList(int fromIndex, int toIndex):返回列表中指定的 fromIndex(包括)和 toIndex(不包括)之间的部分视图

import java.util.ArrayList;
import java.util.List;public class TestDemo01 {public static void main(String[] args) {//(1)void add(int index,E element):在指定索引处添加索引List list1 = new ArrayList();list1.add(11);list1.add(22);list1.add(33);list1.add(44);list1.add(0,"java");System.out.println(list1);   //[java, 11, 22, 33, 44]//(2)E get(int index):获取指定索引处的元素List list2 = new ArrayList();list2.add(11);list2.add(22);list2.add(33);list2.add(44);Object o1 = list2.get(2);System.out.println(o1);   //33//(3)int indexOf(Object o):返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1List list3 = new ArrayList();list3.add(11);list3.add(22);list3.add(33);list3.add(44);int i1 = list3.indexOf(22);System.out.println(i1);   //1//(4)int lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1List list4 = new ArrayList();list4.add(11);list4.add(22);list4.add(33);list4.add(44);list4.add(11);int i2 = list4.lastIndexOf(11);System.out.println(i2);    //4//(5)E remove(int index):移除指定索引处的元素【注意:返回的是被移除的元素】List list5 = new ArrayList();list5.add(11);list5.add(22);list5.add(33);list5.add(44);Object o2 = list5.remove(list5.size() - 1);System.out.println(o2);     //44System.out.println(list5);    //[11, 22, 33]//【注意】remove()可以根据元素删除,也可以根据索引删除,但是在List里面默认根据索引删除//如果在List里面要根据元素删除,需要手动包装list5.remove(Integer.valueOf(11));System.out.println(list5);    //[22, 33]//(6)E set(int index,E element):替换指定索引处的元素【注意:返回的是被替换的元素】List list6 = new ArrayList();list6.add(11);list6.add(22);list6.add(33);list6.add(44);Object o3 = list6.set(2, "java");System.out.println(o3);    //33System.out.println(list6);   //[11, 22, java, 44]//(7)List<E> subList(int fromIndex, int toIndex):返回列表中指定的 fromIndex(包括)和 toIndex(不包括)之间的部分视图List list7 = new ArrayList();list7.add(11);list7.add(22);list7.add(33);list7.add(44);List list = list7.subList(0, 3);System.out.println(list);   //[11, 22, 33] }
}

4. List集合特有的迭代器
(1)ListIterator listIterator ():返回此列表元素的列表迭代器(按适当顺序)
(2)ListIterator继承自Iterator,可以使用Iterator的功能
(3)ListIterator特有的功能

  • boolean hasPrevious():是否存在前一个元素
  • E previous():返回列表中前一个元素
  • 【注意】上面两个方法可以实现反向遍历的效果,但是要注意:要完成反向遍历之间,要先进行正向遍历,这样指针才能移动最后。如果直接反向遍历,是没有效果的,因为指针默认在最前面,他前面没有元素
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;public class TestDemo04 {public static void main(String[] args) {List list = new ArrayList();list.add(11);list.add(22);list.add(33);list.add(44);//正向迭代ListIterator listIterator = list.listIterator();while (listIterator.hasNext()) {Object o = listIterator.next();System.out.println(o);}System.out.println("====================");//反向迭代while (listIterator.hasPrevious()) {Object o = listIterator.previous();System.out.println(o);}}
}

(4)三种遍历List集合的方法

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class TestDemo02 {public static void main(String[] args) {List list = new ArrayList();list.add(11);list.add(22);list.add(33);list.add(44);list.add(55);//方式1:使用for循环for (int i = 0; i < list.size(); i++) {Object o = list.get(i);System.out.println(o);}//方式2:使用Collection集合的迭代器Iterator iterator = list.iterator();while (iterator.hasNext()) {Object o = iterator.next();System.out.println(o);}//方式3:使用List特有的迭代器ListIterator listIterator = list.listIterator();while (listIterator.hasNext()) {Object o = listIterator.next();System.out.println(o);}}
}==================================================================import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class TestDemo03 {public static void main(String[] args) {List list = new ArrayList();list.add(new LOL(18,"伊泽瑞尔"));list.add(new LOL(20,"金克斯"));list.add(new LOL(55,"德莱文"));//1.使用for循环遍历for (int i = 0; i < list.size(); i++) {Object o = list.get(i);LOL lol = (LOL) o;System.out.println(lol.getName() + "===" + lol.getAge());}//2.使用Collection迭代器Iterator iterator = list.iterator();while (iterator.hasNext()) {Object o = iterator.next();LOL lol = (LOL) o;System.out.println(lol.getName() + "===" + lol.getAge());}//3.使用List集合特有的迭代器ListIterator listIterator = list.listIterator();while (listIterator.hasNext()) {Object o = listIterator.next();LOL lol = (LOL) o;System.out.println(lol.getName() + "===" + lol.getAge());}}
}class LOL{private int age;private String name;public LOL() {}public LOL(int age, String name) {this.age = age;this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "LOL{" +"age=" + age +", name='" + name + '\'' +'}';}
}

(5)使用迭代器有一个问题:并发修改异常

  • 问题引入:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;//我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现
public class TestDemo05 {public static void main(String[] args) {List list = new ArrayList();list.add("abc");list.add("lol");list.add("world");list.add("nike");//方法1:使用contains()方法if (list.contains("world")) {list.add("javaee");}System.out.println(list);//方法2,使用迭代器ListIterator listIterator = list.listIterator();while (listIterator.hasNext()) {Object o = listIterator.next();String str = (String) o;if ("world".equals(str)){//                list.add("javaee");   //ConcurrentModificationException 并发修改异常//如果在迭代途中还想增删集合中的元素,需要使用ListIterator中自带的add(),remove()方法listIterator.add("javaee");}}System.out.println(list);/*** 问题产生原因:* 在集合中添加完了元素之后,然后通过迭代器获取集合中的元素,那么迭代器已经知道了集合中元素的个数和顺序* 在我们正常迭代时,没有问题。* 但是在迭代中途要给集合添加或者删减元素,那就会改变集合的长度,从而打乱了迭代器预先知道的元素的个数* 所以就会出现ConcurrentModificationException并发修改异常** 解决方法1:使用迭代器自己的add(),remove()方法.(上述代码)** 解决方法2:不用迭代器,用for循环来遍历,这样就可以在遍历途中增删元素*/for (int i = 0; i < list.size(); i++) {Object o = list.get(i);String str = (String) o;if("world".equals(str)){list.add("javaee");}}System.out.println(list);}
}

Java基础(18)集合概述、Collection集合、List集合相关推荐

  1. Java基础(21)asList()方法、集合嵌套、Set集合、HashSet集合、LinkedHashSet集合、TreeSet集合

    1. asList()方法 1. Arrays工具类的asList(T - t)方法的使用:将数组转化成集合 2. 传进来基本类型数组和引用类型数组的差别 public class TestDemo0 ...

  2. 【Java基础】前端传一个数组或者集合后台怎么接受(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  3. Java基础1:课程概述

    一.Java基础 1.基础常识 软件:即一系列按照特定顺序组织的计算机数据和指令的集合.分为:系统软件 和 应用软件         系统软件:windows , mac os , linux ,un ...

  4. 1-1 Java基础和编程概述

    计算机操作系统 现今的操作系统可以分为3大类: Windows:95.98.2000.XP.vista.7.8.10 Unix: 服务器端 Linux:免费开源(CentOS.Ubuntu.Debia ...

  5. Java基础IO流概述、字符流、字节流、流操作规律、File类、Properties类、打印流、序列流

    IO流:(Input Output)流 字符流的由来:其实就是字节流读取文字字节数据后,不直接操作而是先查指定的码表,获取对应的文字进行操作 简单说:字符流 = 字节流 + 编码表 字节流的两个顶层父 ...

  6. 【CXY】JAVA基础 之 异常概述

    概述: 1.异常给初学者的感觉(笔者当时就是这个感觉,不知道其他人是否有共鸣?) 1.异常是个什么东西?理解不了 2.很复杂 3.异常很"简陋",没什么用 4.我保证我写的程序正确 ...

  7. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)

    自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java ...

  8. 集合框架-Collection与List集合

    对象数组的内存图解: 集合的继承体系图解: * 数组和集合的区别? * A:长度区别 * 数组的长度固定 * 集合长度可变 * B:内容不同 * 数组存储的是同一种类型的元素 * 而集合可以存储不同类 ...

  9. java基础—IO流概述

    1 IO流--字符流 1.1引言 IO流用来处理设备之间的数据传输 java对数据的操作是通过流的方式 java 用于操作流的对象都在IO包中 流按操作数据分为两种,字节流与字符流, 流按流向分为:输 ...

  10. Java基础学习_01 概述及环境配置

    一.概述 1.Java语言平台版本 1.1J2SE(Java 2 Platform Standard Edition)标准版 为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可 ...

最新文章

  1. 清华大学王玉计算机,王玉珏(清华大学环境学院教授)_百度百科
  2. 在元宇宙里怎么交朋友?Meta发布跨语种交流语音模型,支持128种语言无障碍对话...
  3. 文件与目录权限,文件查找
  4. oracle long类型转换成字符串_数值类型在计算机中的保存形式以及类型转换的思考和尝试...
  5. android前台进程视频教程,Android Twilio视频通话,唤醒应用程序并进入前台
  6. Doker : Docker 容器与宿主机共享文件
  7. 图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值
  8. mysql utf-8转utf8mb4_MySQL UTF8 转为 utf8mb4
  9. C# 对密码等数据进行对称性加密解密
  10. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——2.6节TCP/IP协议栈
  11. (Windows) CodeBlocks 下载
  12. 中e管家理财类型都有哪些
  13. yum无法安装wget
  14. winpe修复改linux工具,巧用WinPE修复故障系统的解决方法
  15. mathematica中快捷键
  16. 纺织服装外贸行业解决方案丨汇信外贸软件
  17. linux复制文件多份,Linux下同时复制多个文件
  18. Spring源码构建项目,导入eclipse后,缺失spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar的解决办法
  19. 计算机 打开3389端口,3389端口修改和打开【图文教程】
  20. 现货黄金秘诀(技巧篇)

热门文章

  1. android什么意思是什么平板,什么是Android平板电脑? Android平板电脑列表【图形】...
  2. android settings模块中添加来电反转静音功能
  3. HTML5 - 表格与列表处理
  4. 湖北师范大学计信学院C语言学期实训
  5. 车路协同与高精度地图
  6. 帮铁粉脱单|【深圳女】No.14|93年,英语老师,本科157,喜欢健身,活泼开朗
  7. 卫星工具包在分布式仿真中的实时控制研究
  8. 计算机一个人,科学网—现在一个人能造计算机吗? - 姜咏江的博文
  9. java long 几个字节_java中long类型占多少字节
  10. jsp引入js文件找不到,我发誓路径绝对正确