JAVA中List之contains、containsAll、indexOf
转自:https://www.imooc.com/video/3731
仅供个人学习记录,侵删
一 回顾下Collection
二 List的contains
查询List中是否包含某个值

1 package com.collection; 2 3 import java.util.*; 4 5 public class ListTest { 6 7 public List courseToList; 8 9 public ListTest(){ 10 this.courseToList = new ArrayList(); 11 } 12 public void addCourse(){ 13 //add方法 14 Course c1 = new Course(1,"语文"); 15 courseToList.add(c1); 16 Course temp1 = (Course) courseToList.get(0); 17 System.out.println("添加了课程:"+temp1.id+"-"+temp1.name); 18 19 Course c2 = new Course(2,"数学"); 20 courseToList.add(c2); 21 Course temp3 = (Course) courseToList.get(1); 22 System.out.println("添加了课程:"+temp3.id+"-"+temp3.name); 23 24 Course c3 = new Course(3,"英语"); 25 courseToList.add(0,c3); 26 Course temp4 = (Course) courseToList.get(0); 27 System.out.println("添加了课程:"+temp4.id+"-"+temp4.name); 28 29 /*System.out.println(courseToList.size()); 30 Course c4 = new Course(4,"物理"); 31 //插入时,如果Index值小于0,或大于当前List长度,会报下标越界错误 32 courseToList.add(4,c4); 33 //等于List长度,不会报错 34 courseToList.add(3,c4);*/ 35 36 courseToList.add(3,new Course(4,"理综")); 37 38 //addAll方法 39 Course[] c5 = {new Course(5,"化学"),new Course(6,"生物")}; 40 courseToList.addAll(Arrays.asList(c5)); 41 Course temp5 = (Course) courseToList.get(4); 42 Course temp6 = (Course) courseToList.get(5); 43 System.out.println("添加了两门课程:"+temp5.id+"-"+temp5.name+";"+temp6.id+"-"+temp6.name); 44 45 Course[] c6 = {new Course(7,"地理"),new Course(8,"历史") }; 46 courseToList.addAll(4,Arrays.asList(c6)); 47 Course temp7 = (Course) courseToList.get(4); 48 Course temp8 = (Course) courseToList.get(5); 49 System.out.println("添加了两门课程:"+temp7.id+"-"+temp7.name+";"+temp8.id+"-"+temp8.name); 50 } 51 52 /* 53 * for循环出List中所有元素 54 * */ 55 public void testFor(){ 56 System.out.println(""); 57 System.out.println("for循环课程列表如下:"); 58 for(int i = 0;i<courseToList.size();i++){ 59 Course c = (Course) courseToList.get(i); 60 System.out.println("课程:"+c.id+"-"+c.name); 61 } 62 } 63 64 /* 65 * 查询List中是否包含某个元素 66 * */ 67 public void testContains(){ 68 System.out.println(""); 69 System.out.println("获取List的第一门课程:"); 70 Course c1 =(Course) courseToList.get(0); 71 System.out.println("课程名称:"+c1.name); 72 System.out.println("List是否包含课"+c1.name+":"+courseToList.contains(c1)); 73 74 /*Course c2 =new Course(c1.id,c1.name); 75 System.out.println("根据第一个课程的ID和NAME新建了一个课程C2"); 76 System.out.println("List是否包含课C2"+c2.name+":"+courseToList.contains(c2)); 77 System.out.println("虽然两个课程有相同的ID和name,但是是不同的对象,所以第二个新建的课程返回false");*/ 78 79 //重写Course的equals方法 80 Scanner console = new Scanner(System.in); 81 System.out.println("添加一个课程:"); 82 String name = console.next(); 83 Course c3 = new Course(); 84 c3.name = name; 85 System.out.println("List是否包含课C3"+c3.name+":"+courseToList.contains(c3)); 86 } 87 88 public static void main(String[] args){ 89 ListTest lt = new ListTest(); 90 lt.addCourse(); 91 lt.testFor(); 92 93 lt.testContains(); 94 lt.testContainsAll(); 95 } 96 }
其中Course类如下,类中包含重写后equals方法:

1 package com.collection; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Course { 7 public int id; 8 public String name; 9 public Set Course; 10 11 public Course(int id,String name){ 12 this.id = id; 13 this.name = name; 14 this.Course = new HashSet(); 15 } 16 public Course(){ 17 18 } 19 20 /* 21 * 重写equals方法 22 * 用来比较课程名称是否相同 23 * */ 24 public boolean equals(Object obj){ 25 if(this == obj){ 26 return true; 27 } 28 if(obj == null){ 29 return false; 30 } 31 if(!(obj instanceof Course)){ 32 return false; 33 } 34 Course c = (Course) obj; 35 if(this.name == null){ 36 if(c.name == null){ 37 return true; 38 }else{ 39 return false; 40 } 41 }else{ 42 if(this.name.equals(c.name)){ 43 //if(this.name==c.name){ 44 return true; 45 }else{ 46 return false; 47 } 48 } 49 } 50 }
输出如下:

添加了课程:1-语文 添加了课程:2-数学 添加了课程:3-英语 添加了两门课程:5-化学;6-生物 添加了两门课程:7-地理;8-历史 for循环课程列表如下: 课程:3-英语 课程:1-语文 课程:2-数学 课程:4-理综 课程:7-地理 课程:8-历史 课程:5-化学 课程:6-生物 获取List的第一门课程: 课程名称:英语 List是否包含课英语:true 添加一个课程: 生物 List是否包含课C3生物:true
三 List的contiansAll方法
查询List中是否包含多个值

/* * 查询List中是否包含多个元素 * */ public void testContainsAll(){ Course c1 = new Course(); c1.name = "语文"; Course c2 = new Course(); c2.name = "数学"; Course[] cs1 = {c1,c2}; System.out.println("课程cs1有课程:"+c1.name+"和"+c2.name); System.out.println("List是否包含课cs1:"+courseToList.containsAll(Arrays.asList(cs1))); }
输出如下:
课程cs1有课程:语文和数学
List是否包含课cs1:true
其中有关于==和equals的使用与区别参考下面另一篇随笔
传送门:https://www.cnblogs.com/chengshan/p/12705169.html
四 List的indexOf和lastIndexOf方法
indexOf会返回List中匹配元素的键名
1.indexOf会和contains一样遍历List中的元素,
2.直到contains返回true,则返回当前元素的下标,随即停止遍历
3.如果不包含,则返回-1
4.lastIndexOf 使用方法同indexOf,只是从列尾往列头遍历,返回最后一个匹配元素的下标
System.out.println("课程"+c1.name+"第一次出现的下标为:"+courseToList.indexOf(c1));
System.out.println("课程"+c1.name+"最后一次出现的下标为:"+courseToList.lastIndexOf(c1));
输出:
课程英语第一次出现的下标为:0
课程英语最后一次出现的下标为:0
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析