JAVA中的集合类:

JAVA中的集合类,是一种工具类,,就像是容器,存储任意数量的具有共同属性的对象。

集合的作用:

         一、在类的内部对数据进行组织(如果有些属性的类型相同,但意义与作用不同,就不能把它们放在同一个集合中)

二、可以简单而快速的搜索大数量的条目;

三、有的集合接口,提供了一些列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素(就比如说做广播体操时候,学生站队,你可以让某队某列的学生出列,也可以让某个学生插入到某队某列)

四、有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型。(就比如说你乘坐大巴车,存放行李的车厢就相当于一个集合,车厢里难免会有一些款式相同的行李箱,那么如何区分这些款式相同的行李箱呢?我们可以在行李箱上做上标记,而这个标记就是咱们说的关键字key)

与数组相比---为何选择集合而不选择数组:

一、             数组的长度,或者说容量是固定的,如果数组的长度不够用了,咱们就必须新建一个,然后把原数组的元素都给复制过去,这样就会很麻烦。而集合的长度或者说容量,它是可以在运行时扩展的,使用时比较方便(你可以把数组想象成一个打狗棍,做出来是多长就是多长,把集合当成如意金箍棒,想变多长变多长)

二、             数组只能通过下表来访问元素,类型固定(比如说下表只能是整形的),而有的集合可以通过任意类型查找所映射的具体对象

JAVA中的集合框架:

主要由两大家族组成的,分别是Collection家族和Map家族,Collection和Map是两个接口,JAVA集合框架中的两个接口根。

Collection主要有三个子接口,分别是List,Queue,Set.其中List和Queue接口里边的元素是排列有序的,并且可以是重复的,而Set中的元素是无序的,且不可重复。(List和Set比较常用,List把它翻译成序列,Queue翻译成队列,而Set翻译成集)List中有一个很常用的实现类叫ArrayList,咱们把它叫做数组序列。Queue中有一个很重要的实现类叫LinkedList(叫链表,它同时也是List中的一个实现类),Set也有一个很重要的实现类,叫HashSet(哈希集)

     Map也有众多的子接口,其中最重要的是它的实现类,其中有一个是HashMap(哈希表)。

     在collection中存储的就是一个一个的对象,而Map的内部,会以一个key,一个value两个对象为一个映射去存储数据,而这样一个映射就是一个Entry类的实例,这个Entry类它是Map的一个内部类,把它翻译成键值对,一个键一个值凑成映射的一对,其中key和value都可以是任意类型的对象(可以形象的把collection想象成单身宿舍,里边是一个一个的单身狗,而把Map想象成存储的一对一对的夫妇,他们都是成对出现的(key和value))

List接口及其实现类------ArrayList

     (1)List是元素有序并且可以重复的集合,被称为序列

(2)List可以精确的控制元素的插入位置或删除某个位置元素

(3)ArrayList-----数组序列,是List的一个重要实现类

(4)ArrayList底层是由数组实现的

实现功能-----模拟学生选课功能

选择课程(往集合中添加课程)

删除所选的某门课程(删除集合中的元素)

查看所选课程

修改所选课程

下面看一组实例:

首先定义一个课程类

package Chen_collection;

/*

* 课程类

*/

public classCourse {

private String id;

private String name;

public String get_id(){

return id;

}

public String get_name(){

return name;

}

public Course(String i,String n){

id=i;

name=n;

}

}

 

然后是备选课程类

packageChen_collection;

importjava.util.ArrayList;

importjava.util.Arrays;

importjava.util.Iterator;

importjava.util.List;

/*

* 备选课程类

*/

publicclass ListTest {

/*

* 用于存放备选课程的List

*/

public List courseToSelect;

public ListTest(){//构造函数,用来初始化courseToselect

//由于List是一个接口,所以我们不能直接将它实例化

courseToSelect=newArrayList();//使用ArrayList()方法来实现这个List接口

}

/*

* 用于向courseToSelect中添加备选课程

*/

public void testAdd(){

//创建一个课程对象,并通过调用add()方法,添加到备选课程课程List中

Course cr1=newCourse("1","数据结构");

courseToSelect.add(cr1);

//Coursetemp=courseToSelect.get(0);//因为只在里边添加了一个元素,而List和数组一样,也是从0开始的

//这里会报错是因为,对象存入集合,都变成Object类型,取出时需要用类型转换

Coursetemp=(Course)courseToSelect.get(0);//因为只在里边添加了一个元素,而List和数组一样,也是从0开始的

System.out.println("添加了一个课程:"+temp.get_id()+":"+temp.get_name());

Course[] temp1={newCourse("3","离散数学"),new Course("4","大学英语")};

courseToSelect.addAll(Arrays.asList(temp1));

Coursecour1=(Course)courseToSelect.get(1);

Coursecour2=(Course)courseToSelect.get(2);

System.out.println("添加了两门课程:"+cour1.get_id()+":"+cour1.get_name()+";"+cour2.get_id()+

":"+cour2.get_name());

}

/*

* 取得List中的元素的方法

*/

public void testGet(){

intsize=courseToSelect.size();

System.out.println("有如下课程待选:");

for(int i=0;i<size;i++){

Coursecr1=(Course)courseToSelect.get(i);

System.out.println("课程:"+cr1.get_id()+":"+cr1.get_name());

}

}

/*

* 通过迭代器遍历List

* Iterator就是迭代器的意思

* 这个迭代器本身也是一个接口

*/

public void testIterator(){

Iterator it=courseToSelect.iterator();

System.out.println("有如下课程待选:");

while(it.hasNext()){

Coursecr6=(Course)it.next();

System.out.println("课程:"+cr6.get_id()+":"+cr6.get_name());

}

}

public void forEach(){

for(Objectobj:courseToSelect){

Course b=(Course)obj;

System.out.println("课程"+b.get_id()+":"+b.get_name());

}

}

/*

* 修改List中的元素

*/

public void testModify(){

courseToSelect.set(1, newCourse("7","毛概"));

}

/*

* 删除List中的元素

*/

public void testRemove(){

Coursect=(Course)courseToSelect.get(1);//把取出的类型强转为Course类型

System.out.println("我是课程:"+ct.get_id()+":"+ct.get_name()+"我即将被删除");

courseToSelect.remove(ct);

System.out.println("该课程成功被 删除");

}

/*

* 删除多个元素

*/

public void testRemoveAll(){

System.out.println("删除第一个位置和第二个位置上的元素");

Course []tr={(Course)courseToSelect.get(0),(Course)courseToSelect.get(1)};//创建一个要删除的课程的数组

courseToSelect.removeAll(Arrays.asList(tr));//将course数组转化成一个集合,作为参数传递过去

forEach();

}

public static void main(String[] args){

ListTest lt=new ListTest();

lt.testAdd();

lt.testGet();

lt.testIterator();

lt.forEach();

lt.testModify();

lt.forEach();

lt.testRemove();

lt.forEach();

lt.testRemoveAll();

}

}

希望对初学集合框架的同学有所帮助

《JAVA中的集合框架》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. IE 9 Preview尝鲜
  2. Winform中对ZedGraph的曲线标签进行设置,比如去掉标签边框
  3. Win-Get——Windows下的自由软件自动安装程序
  4. linux lanmp 安装教程,Linux 安装 lanmp
  5. pythoninterp error_Python numpy.interp方法代码示例
  6. 从零开始学架构三 高性能
  7. 添加七牛云存储_七牛云存储如何正确设置流量带宽告警配置(阈值告警)?
  8. oracle用户被锁
  9. php中sprintf与printf函数用法区别
  10. AD10 PCB等长布线----蛇形布线
  11. Java蓝桥杯——Fibonacci数列
  12. 【Paper】2015_Coordinated cruise control for high-speed train movements based on a multi-agent model
  13. 软件设计文档——概要设计书
  14. 走进“开源SDR实验室” 一起玩转GNU Radio:LimeSDR Source/Sink模块
  15. linux下面用ssh替代rsh
  16. systemd 服务使用
  17. 很好的励志文章(特别针对刚刚进入职场的毕业生而写)
  18. oracle 启动与停止工作,win7出现已停止工作如ie已停止工作、word停止工作等等
  19. 华为android是什么手机,为什么说华为的麒麟810是一代神U?
  20. SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱

热门文章

  1. 基于MXNET实现的年龄性别识别
  2. BZOJ1753: [Usaco2005 qua]Who's in the Middle
  3. linux figlet 制作 banner
  4. 函数连续性的无穷小定义
  5. python操作word生成目录_Python操作Word批量生成文章
  6. (转)50本书总结的50句话
  7. 什么是云服务举例说明_什么叫云服务举例说明(云服务器实例是什么)
  8. 带你了解软件系统架构的演变
  9. 苹果系统中国日历服务器,简单三步,让 iPhone 自带日历 App 显示国家节假日安排...
  10. PaddleOCR 图片文字提取