JAVA集合框架之List和Set泛型
Posted 承丶山
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA集合框架之List和Set泛型相关的知识,希望对你有一定的参考价值。
一 List是有序可重复的集合
可以进行增删改查,直接看代码
1 package com.collection; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Iterator; 6 import java.util.List; 7 8 public class ListTest { 9 10 public List courseToList; 11 12 public ListTest(){ 13 this.courseToList = new ArrayList(); 14 } 15 public void addCourse(){ 16 //add方法 17 Course c1 = new Course(1,"语文"); 18 courseToList.add(c1); 19 Course temp1 = (Course) courseToList.get(0); 20 System.out.println("添加了课程:"+temp1.id+"-"+temp1.name); 21 22 Course c2 = new Course(2,"数学"); 23 courseToList.add(c2); 24 Course temp3 = (Course) courseToList.get(1); 25 System.out.println("添加了课程:"+temp3.id+"-"+temp3.name); 26 27 Course c3 = new Course(3,"英语"); 28 courseToList.add(0,c3); 29 Course temp4 = (Course) courseToList.get(0); 30 System.out.println("添加了课程:"+temp4.id+"-"+temp4.name); 31 32 /*System.out.println(courseToList.size()); 33 Course c4 = new Course(4,"物理"); 34 //插入时,如果Index值小于0,或大于当前List长度,会报下标越界错误 35 courseToList.add(4,c4); 36 //等于List长度,不会报错 37 courseToList.add(3,c4);*/ 38 39 courseToList.add(3,new Course(4,"理综")); 40 41 //addAll方法 42 Course[] c5 = {new Course(5,"化学"),new Course(6,"生物")}; 43 courseToList.addAll(Arrays.asList(c5)); 44 Course temp5 = (Course) courseToList.get(4); 45 Course temp6 = (Course) courseToList.get(5); 46 System.out.println("添加了两门课程:"+temp5.id+"-"+temp5.name+";"+temp6.id+"-"+temp6.name); 47 48 Course[] c6 = {new Course(7,"地理"),new Course(8,"历史") }; 49 courseToList.addAll(4,Arrays.asList(c6)); 50 Course temp7 = (Course) courseToList.get(4); 51 Course temp8 = (Course) courseToList.get(5); 52 System.out.println("添加了两门课程:"+temp7.id+"-"+temp7.name+";"+temp8.id+"-"+temp8.name); 53 } 54 55 /* 56 * for循环出List中所有元素 57 * */ 58 public void testFor(){ 59 System.out.println(""); 60 System.out.println("for循环课程列表如下:"); 61 for(int i = 0;i<courseToList.size();i++){ 62 Course c = (Course) courseToList.get(i); 63 System.out.println("课程:"+c.id+"-"+c.name); 64 } 65 } 66 67 /* 68 * List迭代器循环出List中所有元素 69 * */ 70 public void testIt(){ 71 System.out.println(""); 72 System.out.println("迭代器循环课程列表如下:"); 73 Iterator it = (Iterator) courseToList.iterator(); 74 while(it.hasNext()){ 75 Course c = (Course) it.next(); 76 System.out.println("课程:"+c.id+"-"+c.name); 77 } 78 } 79 80 /* 81 * for each循环出List中所有元素 82 * */ 83 public void testForEach(){ 84 System.out.println(""); 85 System.out.println("forEach循环课程列表如下:"); 86 for(Object obj:courseToList){ 87 Course c = (Course) obj; 88 System.out.println("课程:"+c.id+"-"+c.name); 89 } 90 } 91 92 /* 93 * List修改功能 94 * */ 95 public void testModify(){ 96 System.out.println(""); 97 System.out.println("即将修改第4门课"); 98 courseToList.set(3,new Course(4,"物理")); 99 System.out.println("第4门课修改完成"); 100 } 101 102 /* 103 * List删除功能 104 * */ 105 public void testDelete(){ 106 System.out.println(""); 107 //根据键值删除 108 Course c1 = (Course) courseToList.get(3); 109 courseToList.remove(c1); 110 System.out.println("删除课程:"+c1.id+"-"+c1.name); 111 testForEach(); 112 113 //根据索引下标删除 114 courseToList.remove(3); 115 System.out.println(""); 116 System.out.println("删除第4门课程:"); 117 testForEach(); 118 119 //根据键值批量删除 120 Course[] cs1 = {(Course) courseToList.get(3),(Course) courseToList.get(4)}; 121 System.out.println(""); 122 System.out.println("删除两门课程:"); 123 courseToList.removeAll(Arrays.asList(cs1)); 124 testForEach(); 125 } 126 127 /* 128 * 泛型List添加泛型子类型 129 * */ 130 public void addChildrenTest(){ 131 System.out.println(""); 132 ChildrenCourse cc1 = new ChildrenCourse(); 133 courseToList.add(cc1); 134 cc1.id = 10; 135 cc1.name = "我是子类型的课程"; 136 System.out.println("添加了一门泛型子类型的课程:"); 137 testForEach(); 138 } 139 /* 140 * 泛型不能使用基本类型,但是能使用基本类型的包装类 141 * 基本类型如:int long boolean 142 * 基本类型的包装类如:Integer Long Boolean 143 * */ 144 public void addBasicType(){ 145 System.out.println(""); 146 //下面这句会报错 147 //ArrayList<int> basicTest = new ArrayList<int>(); 148 ArrayList<Integer> basicTest = new ArrayList<Integer>(); 149 basicTest.add(3); 150 System.out.println("整形的泛型List第一个元素为:"+basicTest.get(0)); 151 } 152 153 public static void main(String[] args){ 154 ListTest lt = new ListTest(); 155 lt.addCourse(); 156 lt.testFor(); 157 lt.testIt(); 158 lt.testModify(); 159 lt.testForEach(); 160 lt.testDelete(); 161 lt.addChildrenTest(); 162 lt.addBasicType(); 163 } 164 }
其中Course类如下:
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 }
运行结果:
添加了课程: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中无法添加出泛型类型及其子类型以外的类型
示例:
1 package com.collection; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Arrays; 6 7 public class ListTestPro { 8 9 public List<Course> courseToList; 10 11 public ListTestPro(){ 12 this.courseToList = new ArrayList<Course>(); 13 } 14 15 public void addTest(){ 16 Course c1 = new Course(1,"高等数学"); 17 courseToList.add(c1); 18 //泛型List中无法添加出泛型类型及其子类型以外的类型 19 //courseToList.add("尝试下添加字串类型到List中"); 20 Course[] cs1 = {new Course(2,"高等化学"),new Course(3,"大学英语")}; 21 courseToList.addAll(Arrays.asList(cs1)); 22 for(Course c:courseToList){ 23 System.out.println("当前课程:"+c.name); 24 } 25 26 } 27 28 public static void main(String[] args){ 29 ListTestPro ltp = new ListTestPro(); 30 ltp.addTest(); 31 32 } 33 34 }
运行结果:
当前课程:高等数学
当前课程:高等化学
当前课程:大学英语
泛型添加子类型
/* * 泛型List添加泛型子类型 * */ public void addChildrenTest(){ System.out.println(""); ChildrenCourse cc1 = new ChildrenCourse(); courseToList.add(cc1); cc1.id = 10; cc1.name = "我是子类型的课程"; System.out.println("添加了一门泛型子类型的课程:"); testForEach(); }
其中ChildrenCourse类如下:
1 package com.collection; 2 3 public class ChildrenCourse extends Course { 4 }
运行结果:
添加了一门泛型子类型的课程:
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类
1 package com.collection; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Student { 7 public int id; 8 public String name; 9 10 //set中添加某个对象无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那个 11 12 public Set<Course> course = new HashSet<Course>(); 13 14 public Student(int id, String name){ 15 this.id = id; 16 this.name = name; 17 } 18 19 }
运行类
1 package com.collection; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Arrays; 6 import java.util.Scanner; 7 import java.lang.String; 8 9 public class SetTest { 10 11 public List<Course> courseToList = new ArrayList<Course>(); 12 13 public void addCourse(){ 14 //add方法 15 Course c1 = new Course(1,"语文"); 16 courseToList.add(c1); 17 Course temp1 = (Course) courseToList.get(0); 18 System.out.println("添加了课程:"+temp1.id+"-"+temp1.name); 19 20 Course c2 = new Course(2,"数学"); 21 courseToList.add(c2); 22 Course temp3 = (Course) courseToList.get(1); 23 System.out.println("添加了课程:"+temp3.id+"-"+temp3.name); 24 25 Course c3 = new Course(3,"英语"); 26 courseToList.add(0,c3); 27 Course temp4 = (Course) courseToList.get(0); 28 System.out.println("添加了课程:"+temp4.id+"-"+temp4.name); 29 30 31 courseToList.add(3,new Course(4,"物理")); 32 33 //addAll方法 34 Course[] c5 = {new Course(5,"化学"),new Course(6,"生物")}; 35 courseToList.addAll(Arrays.asList(c5)); 36 Course temp5 = (Course) courseToList.get(4); 37 Course temp6 = (Course) courseToList.get(5); 38 System.out.println("添加了两门课程:"+temp5.id+"-"+temp5.name+";"+temp6.id+"-"+temp6.name); 39 40 Course[] c6 = {new Course(7,"地理"),new Course(8,"历史") }; 41 courseToList.addAll(4,Arrays.asList(c6)); 42 Course temp7 = (Course) courseToList.get(4); 43 Course temp8 = (Course) courseToList.get(5); 44 System.out.println("添加了两门课程:"+temp7.id+"-"+temp7.name+";"+temp8.id+"-"+temp8.name); 45 } 46 public void courseForEach(){ 47 System.out.println(""); 48 System.out.println("目前共有课程如下:"); 49 for(Course c : courseToList){ 50 System.out.println("当前课程为:"+c.id+"-"+c.name); 51 } 52 } 53 54 /* 55 * 让同学张三输入课程ID选课程,能选三门 56 * */ 57 public void studentSelectCourse(){ 58 System.out.println(""); 59 Student s_zhang = new Student(1,"张三"); 60 System.out.println("学生"+s_zhang.name+"开始选课:"); 61 62 Scanner console = new Scanner(System.in); 63 for(int i = 0;i < 3 ; i++){ 64 String id = console.next(); 65 for(Course c : courseToList){ 66 if(id.equals( String.valueOf(c.id))){ 67 s_zhang.course.add(c); 68 /* 69 * set中添加某个对象无论添加多少次, 70 * 最终只会保留一个该对象(的引用), 71 * 并且,保留的是第一次添加的那个 72 * */ 73 s_zhang.course.add(c);//set类型无法添加重复的数据 74 System.out.println("选课程"+c.name+"成功"); 75 } 76 } 77 } 78 79 System.out.println("学生"+s_zhang.name+"共选了"+s_zhang.course.size()+"门课程,如下:"); 80 for(Course c1:s_zhang.course){ 81 System.out.println(c1.id+"-"+c1.name); 82 } 83 } 84 85 86 public static void main(String[] args){ 87 SetTest st = new SetTest(); 88 st.addCourse(); 89 st.courseForEach(); 90 st.studentSelectCourse(); 91 92 } 93 }
运行结果:
添加了课程:1-语文 添加了课程:2-数学 添加了课程:3-英语 添加了两门课程:5-化学;6-生物 添加了两门课程:7-地理;8-历史 目前共有课程如下: 当前课程为:3-英语 当前课程为:1-语文 当前课程为:2-数学 当前课程为:4-物理 当前课程为:7-地理 当前课程为:8-历史 当前课程为:5-化学 当前课程为:6-生物 学生张三开始选课: 4 选课程物理成功 7 选课程地理成功 8 选课程历史成功 学生张三共选了3门课程,如下: 8-历史 7-地理 4-物理
以上是关于JAVA集合框架之List和Set泛型的主要内容,如果未能解决你的问题,请参考以下文章