转载:http://blog.csdn.net/self_realian/article/details/51881977
原文写的很好。请看原文。

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);Course cour2=(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(inti=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){Courseb=(Course)obj;System.out.println("课程"+b.get_id()+":"+b.get_name());}}/** 修改List中的元素*/public void testModify(){courseToSelect.set(1, newCourse("7","毛概"));}/** 删除List中的元素*/public void testRemove(){Course ct=(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();}

}

希望对初学集合框架的同学有所帮助
转载:http://blog.csdn.net/self_realian/article/details/51881977

(020)java后台开发之JAVA集合中的List接口相关推荐

  1. (015)java后台开发之web项目中如何添加jar包和删除jar包

    创建一个java web项目后,创建一个index.jsp运行起来后,就发布到服务器上!最简单的java web工程就算完成了!但是往往我们的工程比较复杂,经常会用一些第三方的库(jar)来帮助我们方 ...

  2. (008) java后台开发之java程序中的控制结构

    转自:https://course.tianmaying.com/java-basic+control-flow# 博客应用综合实例 接下来我们来设计一下博客应用,让它可以管理博客. 用户可以输入以下 ...

  3. (022)java后台开发之HttpServletRequest

    本文转载自:Servlet运行原理及404.500.405异常原因和解决方法总结 一.Servlet运行原理 比如,在浏览器地址栏输入http://ip:port/web01/hello,整个通信流程 ...

  4. (016)java后台开发之Eclipse安装反编译插件

    在java(015)中gson-2.2.4.jar 源码的查看基于Attach Source code 链接到源码库gson-2.2.4-source.jar 实现的.而我导入的servlet-api ...

  5. (012) java后台开发之Apache与Tomcat有什么关系和区别

    转载:http://blog.csdn.net/longzs/article/details/10959945 经常在用apache和tomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系, ...

  6. (007) java后台开发之Scanner报错java.util.NoSuchElementException

    在测试Scanner 时写了两次 .close(); 结果运行报错. 原因参考:http://www.cnblogs.com/qingyibusi/p/5812725.html 一个方法A使用了Sca ...

  7. (005) java后台开发之Mac终端命令运行java

    Mac终端命令运行java 由于mac已经装好java环境,所以直接课运行java命令,很方便. 1.编译一个java文件: javac /Users/用户名/Desktop/HelloWorld.j ...

  8. (004) java后台开发之Eclipse(Neon) 版本安装Java EE插件

    Eclipse Neon Java版本安装Java EE插件 Help→Install New Software 地址:Neon - http://download.eclipse.org/relea ...

  9. (014)java后台开发之用tomcat发布自己的javaWeb项目

    本地模拟tomcat发布javaWeb项目需要: 1.Mac本地安装tomcat. 2.Mac安装Eclipse-JavaEE. 3.tomcat 在Mac的安装. (http://blog.csdn ...

最新文章

  1. linux kernel 内存管理 感想总结(未完待续)
  2. WinCE文件目录定制及内存调整
  3. 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
  4. 电子计算机专业211大学,这所高校不是211,但“计算机”实力远超985,被称“IT人才摇篮”...
  5. 简单工厂(Simple Pattern)模式
  6. systemctl 管理服务命令
  7. 光伏风电系统PSCAD仿真成功
  8. 无线鼠标显示是台式计算机,无线鼠标怎么连接台式电脑?无线鼠标连接台式机与笔记本操作方法...
  9. Unity Android Ios 微信SDK 接入
  10. 电影票的c语言程序,不知道电影票在小程序也能购买的?分享3款购票小程序赶紧来看看!...
  11. Bert预训练新法则
  12. JS中出现三个点(...)的作用是什么
  13. 国家气象局天气预报中城市代码
  14. Android 解决打包时提示65536问题
  15. 做一名名企科学家,还是当一个终身教授,这是一个问题
  16. GCC编译静态库的-fPIC选项
  17. 第二章 离散时间信号和系统的时域描述分析 2.2.2 线性时不变系统
  18. 怎样使用PS制作木刻效果图片?添加木刻特效原来这么简单!
  19. 重装系统之硬盘安装WIN7教程
  20. Android8.0 安装apk

热门文章

  1. 神经网络第一步,手写数字识别的例子分享给大家
  2. 工信部:推动窄带物联网、5G泛在信息基础设施
  3. Unity3D开发——LeRunning的人物角色信息的显示
  4. Bilateral Filtering(双边滤波) for SSAO(转)
  5. 第19课:Spark高级排序彻底解密
  6. See the World 2015-6-10
  7. ecshop支付方式含线下自提
  8. jdbc连接oracle rac服务器
  9. C#判断文件及文件夹是否存在并创建
  10. C#递归获取JSON所有键值对