JAVA集合框架之List和Set、泛型
一 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-物理
JAVA集合框架之List和Set、泛型的更多相关文章
- Java——集合框架之Set&HashSet,HashMap,泛型,compareTo
Set Set接口--数据存放无序,非常简单,主要呈现信息列表 Set接口存储一组唯一.无序的对象 HashSet是Set接口常用的实现类 Set接口不存在get方法 Iterator接口:表示对集合 ...
- 一起学 Java集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- (Collection, List, 泛型)JAVA集合框架一
Java集合框架部分细节总结一 Collection List 有序,有下标,元素可重复 Set 无序,无下标,元素不可重复 以上为Collection接口 以ArrayList为实现类实现遍历:增强 ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
- Java集合框架的总结
本篇文章先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析.当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进 ...
- 【JAVA集合框架之工具类】
一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...
- 【JAVA集合框架之Map】
一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java集合框架中List接口的简单使用
Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...
- java集合框架1
1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成O ...
随机推荐
- FastDFS源码学习(一)FastDFS介绍及源码编译安装
FastDFS是淘宝的余庆主导开发的一个分布式文件系统,采用C语言开发,性能较优.在淘宝网.京东商城.支付宝和某些网盘等系统均有使用,使用场景十分广泛. 下图来源:https://blog.csdn. ...
- 《Java8 Stream编码实战》正式推出
当我第一次在项目代码中看到Stream流的时候,心里不由得骂了一句"傻X"炫什么技.当我开始尝试在代码中使用Stream时,不由得感叹真香. 记得以前有朋友聊天说,他在代码中用了 ...
- Natas31 Writeup(Perl 远程命令执行)
Natas31: 源码如下: my $cgi = CGI->new; if ($cgi->upload('file')) { my $file = $cgi->param('file ...
- linux环境下的时间编程
Linux下提供了丰富的api以供开发者们处理和时间相关的问题.然而这些接口看似各自为政实则有有着千丝万缕的联系,在学习和时间中引发了各种各样的混乱.因此时间处理成为了许多Linux开发者的梦魇,遇到 ...
- Angularjs优点
数据双向绑定,前后台的更改都可以随时生效, 提供mvc开发模式模式,剥离前端各部分代码,使代码便于维护管理. 简化了你写DOM操作
- 洛谷 P2257 YY的GCD 题解
原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...
- 题解 P4302 【[SCOI2003]字符串折叠】
讲讲我的做法 题目大意:对一个字符串进行折叠是它长度最小 看一眼数据范围:哇!字符串长度不超过100!这是一道省选题,不可能给你太宽裕的时限,所以,题目基本暗示你要用\(n^{3}\)多一些的算法复杂 ...
- Java并发包下锁学习第一篇:介绍及学习安排
Java并发包下锁学习第一篇:介绍及学习安排 在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁.从今天起,凯哥将带领大家一 ...
- IOS(苹果手机)使用video播放HLS流,实现在内部播放及全屏播放(即非全屏和全屏播放)。
需求: 实现PC及移动端播放HLS流,并且可以自动播放,在页面内部播放及全屏播放功能. 初步:PC及安卓机使用hls.js实现hls流自动播放及全屏非全屏播放 首先使用了hls.js插件,可以实现在P ...
- OpenCV-Python 直方图-1:查找、绘制和分析 | 二十六
目标 学会 使用OpenCV和Numpy函数查找直方图 使用OpenCV和Matplotlib函数绘制直方图 你将看到以下函数:cv.calcHist(),np.histogram()等. 理论 那么 ...