(020)java后台开发之JAVA集合中的List接口
转载: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接口相关推荐
- (015)java后台开发之web项目中如何添加jar包和删除jar包
创建一个java web项目后,创建一个index.jsp运行起来后,就发布到服务器上!最简单的java web工程就算完成了!但是往往我们的工程比较复杂,经常会用一些第三方的库(jar)来帮助我们方 ...
- (008) java后台开发之java程序中的控制结构
转自:https://course.tianmaying.com/java-basic+control-flow# 博客应用综合实例 接下来我们来设计一下博客应用,让它可以管理博客. 用户可以输入以下 ...
- (022)java后台开发之HttpServletRequest
本文转载自:Servlet运行原理及404.500.405异常原因和解决方法总结 一.Servlet运行原理 比如,在浏览器地址栏输入http://ip:port/web01/hello,整个通信流程 ...
- (016)java后台开发之Eclipse安装反编译插件
在java(015)中gson-2.2.4.jar 源码的查看基于Attach Source code 链接到源码库gson-2.2.4-source.jar 实现的.而我导入的servlet-api ...
- (012) java后台开发之Apache与Tomcat有什么关系和区别
转载:http://blog.csdn.net/longzs/article/details/10959945 经常在用apache和tomcat等这些服务器,可是总感觉还是不清楚他们之间有什么关系, ...
- (007) java后台开发之Scanner报错java.util.NoSuchElementException
在测试Scanner 时写了两次 .close(); 结果运行报错. 原因参考:http://www.cnblogs.com/qingyibusi/p/5812725.html 一个方法A使用了Sca ...
- (005) java后台开发之Mac终端命令运行java
Mac终端命令运行java 由于mac已经装好java环境,所以直接课运行java命令,很方便. 1.编译一个java文件: javac /Users/用户名/Desktop/HelloWorld.j ...
- (004) java后台开发之Eclipse(Neon) 版本安装Java EE插件
Eclipse Neon Java版本安装Java EE插件 Help→Install New Software 地址:Neon - http://download.eclipse.org/relea ...
- (014)java后台开发之用tomcat发布自己的javaWeb项目
本地模拟tomcat发布javaWeb项目需要: 1.Mac本地安装tomcat. 2.Mac安装Eclipse-JavaEE. 3.tomcat 在Mac的安装. (http://blog.csdn ...
最新文章
- linux kernel 内存管理 感想总结(未完待续)
- WinCE文件目录定制及内存调整
- 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
- 电子计算机专业211大学,这所高校不是211,但“计算机”实力远超985,被称“IT人才摇篮”...
- 简单工厂(Simple Pattern)模式
- systemctl 管理服务命令
- 光伏风电系统PSCAD仿真成功
- 无线鼠标显示是台式计算机,无线鼠标怎么连接台式电脑?无线鼠标连接台式机与笔记本操作方法...
- Unity Android Ios 微信SDK 接入
- 电影票的c语言程序,不知道电影票在小程序也能购买的?分享3款购票小程序赶紧来看看!...
- Bert预训练新法则
- JS中出现三个点(...)的作用是什么
- 国家气象局天气预报中城市代码
- Android 解决打包时提示65536问题
- 做一名名企科学家,还是当一个终身教授,这是一个问题
- GCC编译静态库的-fPIC选项
- 第二章 离散时间信号和系统的时域描述分析 2.2.2 线性时不变系统
- 怎样使用PS制作木刻效果图片?添加木刻特效原来这么简单!
- 重装系统之硬盘安装WIN7教程
- Android8.0 安装apk