JAVA集合框架之List和Set、泛型
阅读原文时间:2023年07月10日阅读:2

一  List是有序可重复的集合

可以进行增删改查,直接看代码

package com.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class ListTest {

 public List courseToList;

 public ListTest(){  
     this.courseToList = new ArrayList();  
 }  
 public void addCourse(){  
     //add方法  
     Course c1 = new Course(1,"语文");  
     courseToList.add(c1);  
     Course temp1 = (Course) courseToList.get(0);  
     System.out.println("添加了课程:"+temp1.id+"-"+temp1.name);

     Course c2 = new Course(2,"数学");  
     courseToList.add(c2);  
     Course temp3 = (Course) courseToList.get(1);  
     System.out.println("添加了课程:"+temp3.id+"-"+temp3.name);

     Course c3 = new Course(3,"英语");  
     courseToList.add(0,c3);  
     Course temp4 = (Course) courseToList.get(0);  
     System.out.println("添加了课程:"+temp4.id+"-"+temp4.name);

     /\*System.out.println(courseToList.size());  
     Course c4 = new Course(4,"物理");  
     //插入时,如果Index值小于0,或大于当前List长度,会报下标越界错误  
     courseToList.add(4,c4);  
     //等于List长度,不会报错  
     courseToList.add(3,c4);\*/

     courseToList.add(3,new Course(4,"理综"));

     //addAll方法  
     Course\[\] c5 = {new Course(5,"化学"),new Course(6,"生物")};  
     courseToList.addAll(Arrays.asList(c5));  
     Course temp5 = (Course) courseToList.get(4);  
     Course temp6 = (Course) courseToList.get(5);  
     System.out.println("添加了两门课程:"+temp5.id+"-"+temp5.name+";"+temp6.id+"-"+temp6.name);

     Course\[\] c6 = {new Course(7,"地理"),new Course(8,"历史") };  
     courseToList.addAll(4,Arrays.asList(c6));  
     Course temp7 = (Course) courseToList.get(4);  
     Course temp8 = (Course) courseToList.get(5);  
     System.out.println("添加了两门课程:"+temp7.id+"-"+temp7.name+";"+temp8.id+"-"+temp8.name);  
 }

 /\*  
 \* for循环出List中所有元素  
 \* \*/  
 public void testFor(){  
     System.out.println("");  
     System.out.println("for循环课程列表如下:");  
     for(int i = 0;i<courseToList.size();i++){  
         Course c = (Course) courseToList.get(i);  
         System.out.println("课程:"+c.id+"-"+c.name);  
     }  
 }

 /\*  
 \* List迭代器循环出List中所有元素  
 \* \*/  
 public void testIt(){  
     System.out.println("");  
     System.out.println("迭代器循环课程列表如下:");  
     Iterator it = (Iterator) courseToList.iterator();  
     while(it.hasNext()){  
         Course c = (Course) it.next();  
         System.out.println("课程:"+c.id+"-"+c.name);  
     }  
 }

 /\*  
 \* for each循环出List中所有元素  
 \* \*/  
 public void testForEach(){  
     System.out.println("");  
     System.out.println("forEach循环课程列表如下:");  
     for(Object obj:courseToList){  
         Course c = (Course) obj;  
         System.out.println("课程:"+c.id+"-"+c.name);  
     }  
 }

 /\*  
 \* List修改功能  
 \* \*/  
 public void testModify(){  
     System.out.println("");  
     System.out.println("即将修改第4门课");  
     courseToList.set(3,new Course(4,"物理"));  
     System.out.println("第4门课修改完成");  
 }

 /\*  
 \* List删除功能  
 \* \*/  
 public void testDelete(){  
     System.out.println("");  
     //根据键值删除  
     Course c1 = (Course) courseToList.get(3);  
     courseToList.remove(c1);  
     System.out.println("删除课程:"+c1.id+"-"+c1.name);  
     testForEach();

     //根据索引下标删除  
     courseToList.remove(3);  
     System.out.println("");  
     System.out.println("删除第4门课程:");  
     testForEach();

     //根据键值批量删除  
     Course\[\] cs1 = {(Course) courseToList.get(3),(Course) courseToList.get(4)};  
     System.out.println("");  
     System.out.println("删除两门课程:");  
     courseToList.removeAll(Arrays.asList(cs1));  
     testForEach();  
 }

 /\*  
 \* 泛型List添加泛型子类型  
 \* \*/  
 public void addChildrenTest(){  
     System.out.println("");  
     ChildrenCourse cc1 = new ChildrenCourse();  
     courseToList.add(cc1);  
     cc1.id = 10;  
     cc1.name = "我是子类型的课程";  
     System.out.println("添加了一门泛型子类型的课程:");  
     testForEach();  
 }  
 /\*  
 \* 泛型不能使用基本类型,但是能使用基本类型的包装类  
 \* 基本类型如:int long boolean  
 \* 基本类型的包装类如:Integer Long Boolean  
 \* \*/  
 public void addBasicType(){  
     System.out.println("");  
     //下面这句会报错  
     //ArrayList<int> basicTest = new ArrayList<int>();  
     ArrayList<Integer> basicTest = new ArrayList<Integer>();  
     basicTest.add(3);  
     System.out.println("整形的泛型List第一个元素为:"+basicTest.get(0));  
 }

 public static void main(String\[\] args){  
     ListTest lt = new ListTest();  
     lt.addCourse();  
     lt.testFor();  
     lt.testIt();  
     lt.testModify();  
     lt.testForEach();  
     lt.testDelete();  
     lt.addChildrenTest();  
     lt.addBasicType();  
 }  

}

其中Course类如下:

package com.collection;

import java.util.HashSet;
import java.util.Set;

public class Course {
public int id;
public String name;
public Set Course;

 public Course(int id,String name){  
     this.id = id;  
     this.name = name;  
     this.Course = new HashSet();  
 }  
 public Course(){

 }  

}

运行结果:

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

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

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

即将修改第4门课
第4门课修改完成

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

删除课程:4-物理

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

删除第4门课程:

forEach循环课程列表如下:
课程:3-英语
课程:1-语文
课程:2-数学
课程:8-历史
课程:5-化学
课程:6-生物

删除两门课程:

forEach循环课程列表如下:
课程:3-英语
课程:1-语文
课程:2-数学
课程:6-生物

添加了一门泛型子类型的课程:

forEach循环课程列表如下:
课程:3-英语
课程:1-语文
课程:2-数学
课程:6-生物
课程:10-我是子类型的课程

整形的泛型List第一个元素为:3

二  泛型

泛型List中无法添加出泛型类型及其子类型以外的类型
示例:

package com.collection;

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class ListTestPro {

 public List<Course> courseToList;

 public ListTestPro(){  
     this.courseToList = new ArrayList<Course>();  
 }

 public void addTest(){  
     Course c1 = new Course(1,"高等数学");  
     courseToList.add(c1);  
     //泛型List中无法添加出泛型类型及其子类型以外的类型  
     //courseToList.add("尝试下添加字串类型到List中");  
     Course\[\] cs1 = {new Course(2,"高等化学"),new Course(3,"大学英语")};  
     courseToList.addAll(Arrays.asList(cs1));  
     for(Course c:courseToList){  
         System.out.println("当前课程:"+c.name);  
     }

 }

 public static void main(String\[\] args){  
     ListTestPro ltp = new ListTestPro();  
     ltp.addTest();

 }

}

运行结果:

当前课程:高等数学
当前课程:高等化学
当前课程:大学英语

泛型添加子类型

/*
* 泛型List添加泛型子类型
* */
public void addChildrenTest(){
System.out.println("");
ChildrenCourse cc1 = new ChildrenCourse();
courseToList.add(cc1);
cc1.id = 10;
cc1.name = "我是子类型的课程";
System.out.println("添加了一门泛型子类型的课程:");
testForEach();
}

其中ChildrenCourse类如下:

package com.collection;

public class ChildrenCourse extends Course {
}

运行结果:

添加了一门泛型子类型的课程:

forEach循环课程列表如下:
课程:3-英语
课程:1-语文
课程:2-数学
课程:6-生物
课程:10-我是子类型的课程

基本类型的泛型

/\*  
\* 泛型不能使用基本类型,但是能使用基本类型的包装类  
\* 基本类型如:int long boolean等  
\* 基本类型的包装类如:Integer Long Boolean等  
\* \*/  
public void addBasicType(){  
    System.out.println("");  
    //下面这句会报错  
    //ArrayList<int> basicTest = new ArrayList<int>();  
    ArrayList<Integer> basicTest = new ArrayList<Integer>();  
    basicTest.add(3);  
    System.out.println("整形的泛型List第一个元素为:"+basicTest.get(0));  
}

运行结果:

整形的泛型List第一个元素为:3

三  Set是无序的不可重复集合

set中添加某个对象无论添加多少次,
最终只会保留一个该对象(的引用),
并且,保留的是第一次添加的那个

show me the code :
Student类

package com.collection;

import java.util.HashSet;
import java.util.Set;

public class Student {
public int id;
public String name;

 //set中添加某个对象无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那个

 public Set<Course> course = new HashSet<Course>();

 public Student(int id, String name){  
     this.id = id;  
     this.name = name;  
 }

}

 运行类

package com.collection;

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Scanner;
import java.lang.String;

public class SetTest {

 public List<Course> courseToList = new ArrayList<Course>();

 public void addCourse(){  
     //add方法  
     Course c1 = new Course(1,"语文");  
     courseToList.add(c1);  
     Course temp1 = (Course) courseToList.get(0);  
     System.out.println("添加了课程:"+temp1.id+"-"+temp1.name);

     Course c2 = new Course(2,"数学");  
     courseToList.add(c2);  
     Course temp3 = (Course) courseToList.get(1);  
     System.out.println("添加了课程:"+temp3.id+"-"+temp3.name);

     Course c3 = new Course(3,"英语");  
     courseToList.add(0,c3);  
     Course temp4 = (Course) courseToList.get(0);  
     System.out.println("添加了课程:"+temp4.id+"-"+temp4.name);

     courseToList.add(3,new Course(4,"物理"));

     //addAll方法  
     Course\[\] c5 = {new Course(5,"化学"),new Course(6,"生物")};  
     courseToList.addAll(Arrays.asList(c5));  
     Course temp5 = (Course) courseToList.get(4);  
     Course temp6 = (Course) courseToList.get(5);  
     System.out.println("添加了两门课程:"+temp5.id+"-"+temp5.name+";"+temp6.id+"-"+temp6.name);

     Course\[\] c6 = {new Course(7,"地理"),new Course(8,"历史") };  
     courseToList.addAll(4,Arrays.asList(c6));  
     Course temp7 = (Course) courseToList.get(4);  
     Course temp8 = (Course) courseToList.get(5);  
     System.out.println("添加了两门课程:"+temp7.id+"-"+temp7.name+";"+temp8.id+"-"+temp8.name);  
 }  
 public void courseForEach(){  
     System.out.println("");  
     System.out.println("目前共有课程如下:");  
     for(Course c : courseToList){  
         System.out.println("当前课程为:"+c.id+"-"+c.name);  
     }  
 }

 /\*  
 \* 让同学张三输入课程ID选课程,能选三门  
 \* \*/  
 public void studentSelectCourse(){  
     System.out.println("");  
     Student s\_zhang = new Student(1,"张三");  
     System.out.println("学生"+s\_zhang.name+"开始选课:");

     Scanner console = new Scanner(System.in);  
     for(int i = 0;i < 3 ; i++){  
         String id =  console.next();  
         for(Course c : courseToList){  
             if(id.equals( String.valueOf(c.id))){  
                 s\_zhang.course.add(c);  
                 /\*  
                 \* set中添加某个对象无论添加多少次,  
                 \* 最终只会保留一个该对象(的引用),  
                 \* 并且,保留的是第一次添加的那个  
                 \* \*/  
                 s\_zhang.course.add(c);//set类型无法添加重复的数据  
                 System.out.println("选课程"+c.name+"成功");  
             }  
         }  
     }

     System.out.println("学生"+s\_zhang.name+"共选了"+s\_zhang.course.size()+"门课程,如下:");  
     for(Course c1:s\_zhang.course){  
         System.out.println(c1.id+"-"+c1.name);  
     }  
 }

 public static void main(String\[\] args){  
     SetTest st = new SetTest();  
     st.addCourse();  
     st.courseForEach();  
     st.studentSelectCourse();

 }  

}

运行结果:

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

目前共有课程如下:
当前课程为:3-英语
当前课程为:1-语文
当前课程为:2-数学
当前课程为:4-物理
当前课程为:7-地理
当前课程为:8-历史
当前课程为:5-化学
当前课程为:6-生物

学生张三开始选课:
4
选课程物理成功
7
选课程地理成功
8
选课程历史成功
学生张三共选了3门课程,如下:
8-历史
7-地理
4-物理

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章