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 }
View Code

其中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 }
View Code

输出如下:

添加了课程:1-语文
添加了课程:2-数学
添加了课程:3-英语
添加了两门课程:5-化学;6-生物
添加了两门课程:7-地理;8-历史

for循环课程列表如下:
课程:3-英语
课程:1-语文
课程:2-数学
课程:4-理综
课程:7-地理
课程:8-历史
课程:5-化学
课程:6-生物

获取List的第一门课程:
课程名称:英语
List是否包含课英语:true
添加一个课程:
生物
List是否包含课C3生物:true
View Code

 

 

三  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)));
    }
View Code

输出如下:

课程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

posted @ 2020-04-15 16:32  风铃如沧海  阅读(7386)  评论(0编辑  收藏  举报