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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM