Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放到同一个集合中,否则是不能放进去的;

  集合可以对元素进行简单快速的查找、插入、删除操作

  某些集合可以有<key value>映射的关系

  数组的长度是固定的,而集合的长度是跟随元素的个数动态变化的,灵活性和扩展性都比数组更加优越

  数组只能存放基本类型的数据,而集合存放的是对象引用类型的

  数组只能通过索引来访问,但是集合的访问则可以通过任意类型查找元素

  

  Java中提供了一些接口用于构建集合,根接口主要有:Collection和Map接口

  Collection接口常用的是3个子接口:List(序列)、Queue(队列)、Set(数据集);对于这个子接口各有自己的实现方法,来创建引用,常用的:List实现方法是ArrayList方法,Queue实现方法是LinkedList,Set实现方法是HashSet

  Map接口则可以由HashMap方法直接实现

  

  以上是集合的基本概念和Java中常用的集合框架接口,下面来看一个学生选课的简单示例,代码如下:

  课程类,Course.java

  1. /*
  2. * 课程类,规定课程结构,用于向集合中传入此类型的元素
  3. */
  4.  
  5. public class Course {
  6. public String id;
  7. public String name;
  8. public Course(String id,String name){
  9. //含参构造方法
  10. this.id = id;
  11. this.name = name;
  12. }
  13.  
  14. public Course(){
  15. //无参构造器,为了子类初始化隐式构造方法
  16. }
  17. }

  集合操作类,ListTest.java

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Iterator;
  4. import java.util.List;
  5.  
  6. /*
  7. * 操作课程测试类
  8. */
  9.  
  10. public class ListTest {
  11. public List coursesToSelect; //定义List接口类型的属性,存放课程
  12.  
  13. public ListTest(){
  14. this.coursesToSelect = new ArrayList(); //初始化构造器,通过ArrayList方法实现List接口类型属性初始化
  15. }
  16. /*
  17. * 用于添加课程的方法
  18. */
  19. public void testAdd(){
  20. Course cr1 = new Course("1","数据结构"); //不一个类中,必须实例化课程对象,传入初始值
  21. coursesToSelect.add(cr1); //添加属性到List中,位置0
  22. Course temp1 = (Course) coursesToSelect.get(0); //取出对应位置的属性,因为取出时全部为Object类型的所以需要转成Course类型的
  23. System.out.println("添加了课程:" + temp1.id + ":" + temp1.name);
  24.  
  25. Course cr2 = new Course("2","C语言");
  26. coursesToSelect.add(0,cr2); //通过重载的add指定添加位置,会把刚才添加的0位置挤到1位置
  27. Course temp2 = (Course) coursesToSelect.get(0); //取出对应位置的属性,因为取出时全部为Object类型的所以需要转成Course类型的
  28. System.out.println("添加了课程:" + temp2.id + ":" + temp2.name);
  29.  
  30. //List中元素允许重复,重新添加一次
  31. coursesToSelect.add(cr1); //重新添加课程1,索引继续往后排
  32. Course temp0 = (Course) coursesToSelect.get(2);
  33. System.out.println("添加了课程:" + temp0.id + ":" + temp0.name);
  34.  
  35. // Course cr3 = new Course("3","Test");
  36. // coursesToSelect.add(4,cr3); //添加索引不能大于当前元素个数,所以最大应该是2,否则会抛出数组下标越界异常
  37.  
  38. Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")}; //创建一个课程类数组,存放多个对象
  39. coursesToSelect.addAll(Arrays.asList(course)); //把数组转成List传递到courseToSelect属性中
  40. Course temp3 = (Course) coursesToSelect.get(3);
  41. Course temp4 = (Course) coursesToSelect.get(4);
  42. System.out.println("添加了两门课程:" + temp3.id + ":" + temp3.name + " " + temp4.id + ":" + temp4.name);
  43.  
  44. Course[] course2 = {new Course("5","高等数学"),new Course("6","算法分析")};
  45. coursesToSelect.addAll(2,Arrays.asList(course2)); //通过重载的addAll指定添加位置,只是放置多个对象,原有的将会被挤出
  46. Course temp5 = (Course) coursesToSelect.get(2);
  47. Course temp6 = (Course) coursesToSelect.get(3);
  48. System.out.println("添加了两门课程:" + temp5.id + ":" + temp5.name + " " + temp6.id + ":" + temp6.name);
  49. }
  50.  
  51. /*
  52. * 遍历List中元素的方法
  53. */
  54. public void testGet(){
  55. int size = coursesToSelect.size(); //取得List中的元素个数
  56. System.out.println("有如下课程:");
  57. for(int i = 0;i < size;i++){
  58. Course cr = (Course) coursesToSelect.get(i);
  59. System.out.println("课程:" + cr.id + ":" + cr.name);
  60. }
  61. }
  62.  
  63. /*
  64. * 通过迭代器来遍历List中的元素
  65. */
  66. public void testIterator(){
  67. Iterator it = coursesToSelect.iterator(); //通过iterator实现Iterator接口
  68. System.out.println("有以下课程:");
  69. //如果下一个元素存在,循环
  70. while(it.hasNext()){
  71. Course cr = (Course) it.next();
  72. System.out.println("课程:" + cr.id + ":" + cr.name);
  73. }
  74. }
  75.  
  76. /*
  77. * 通过foreach方法遍历List中的元素
  78. */
  79. public void testForeach(){
  80. System.out.println("有以下课程:");
  81. //因为coursesToSelect中元素都为Object所以foreach循环元素为:Object obj
  82. for(Object obj:coursesToSelect){
  83. Course cr = (Course) obj;
  84. System.out.println("课程:" + cr.id + ":" + cr.name);
  85. }
  86. }
  87.  
  88. /*
  89. * 修改List中的元素
  90. */
  91. public void testModify(){
  92. coursesToSelect.set(4,new Course("7","操作系统")); //通过set方法修改相应位置的元素
  93. }
  94.  
  95. /*
  96. * 删除List中的元素
  97. */
  98. public void testRemove(){
  99. // Course cr = (Course) coursesToSelect.get(4);
  100. // System.out.println("将要删除课程:" + cr.id + ":" + cr.name);
  101. // //coursesToSelect.remove(4); //按照索引删除课程
  102. // coursesToSelect.remove(cr); //按照传入对象删除课程
  103. // testForeach();
  104. System.out.println("将同时要删除索引4和5上的元素:");
  105. Course[] course = {(Course) coursesToSelect.get(4),(Course) coursesToSelect.get(5)};
  106. coursesToSelect.removeAll(Arrays.asList(course)); //把对象数组转成List类型,然后批量删除
  107. testForeach();
  108.  
  109. }
  110.  
  111. /*
  112. * 往List中添加其他类型的时候会出现异常
  113. */
  114. public void testType(){
  115. System.out.println("往List添加其他类型的元素:");
  116. coursesToSelect.add("string");
  117. //会报出异常,String类型无法转换成Course类型
  118. }
  119.  
  120. public static void main(String[] args){
  121. ListTest lt = new ListTest(); //实例化对象,并调用构造器初始化
  122. lt.testAdd();
  123. // lt.testType();
  124. // lt.testForeach();
  125. lt.testGet();
  126. lt.testIterator();
  127. lt.testForeach();
  128. lt.testModify();
  129. lt.testForeach();
  130.  
  131. lt.testRemove();
  132. }
  133.  
  134. }

  代码比较乱,主要就是体现了怎么定义List引用,通过构造方法初始化List引用,通过add、addAll、get、set、remove、removeAll这些方法来操作List中的元素,同时有一些常见的错误注释中都有说明,然后就是通过3中遍历方式遍历出List中所有元素,值得注意的一点是把属性放入List的引用coursesToSelect属性中时全部会被转换成Object类型,然后取出时也是Object类型的,不是Course类型的,所以每次取出时都要用一次类型强制转换,下一篇文章会解决这种问题,就是使用泛型来解决

  以上就是List接口的简单使用,另外还有很多方法,这里只是最基本的操作,只要对集合的本质有个明确的理解和认识,其他的具体方法经常去查Java API文档就可以了

Java集合框架中List接口的简单使用的更多相关文章

  1. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  2. 第49节:Java集合框架中底层文档的List与Set

    Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...

  3. Java集合框架之Set接口浅析

    Java集合框架之Set接口浅析 一.java.util.Set接口综述: 这里只对Set接口做一简单综述,其具体实现类的分析,朋友们可关注我后续的博文 1.1Set接口简介 java.util.se ...

  4. Java集合框架中底层文档的List与Set

    Java集合框架中的List与Set // 简书作者:达叔小生 Collection -> Set 无序不重复 -> 无序HashSet,需要排序TreeSet -> List 有序 ...

  5. Java集合框架之Collection接口

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  6. java 集合框架(二)Iterable接口

    Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法 修饰符和返回值 方法名 描述 Iterator<T> iter ...

  7. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  8. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

  9. Java集合框架之List接口浅析

    Java集合框架之List接口浅析 一.List综述: 毫无疑问List接口位于java.util包下,继承自 Collection接口 存储元素的特点: 有序可重复(有序:即存进去是什么顺序,取出来 ...

随机推荐

  1. jdownload的使用

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. BZOJ-2875 随机数生成器 矩阵乘法快速幂+快速乘

    题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 ...

  3. Spring+C3P0数据库连接池配置

    一.xml文件读取.properties文件连接数据库 1.xml文件中的配置 <bean id="dataSourceLocal" name="dataSourc ...

  4. angularjs-$interval使用

    1. 简单使用 var app = angular.module("app",[]); app.controller("AppCtrl", function($ ...

  5. BZOJ4034 T2

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所 ...

  6. 在excel批量更改单元格类型后的批量刷新显示

    把E的东西变成完整显示 解决办法: 选中所需要更改的整列数据------>菜单栏的数据选项------>分列

  7. 迷宫问题(bfs)

    import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class BFS { priv ...

  8. 检验php用时

    <?php// 实例1 /** * @start time */function proStartTime() { global $startTime; $mtime1 = explode(&q ...

  9. linux4

    linux 特点:1.免费 开源(代码公开)2.支持多线程/多用户的操作系统3.安全性4.对内存和文件管理有自己的一套优越的方法 linux最小只需要4M ->嵌入式开发默认不启动用户界面roo ...

  10. Visual Studio Online Integrations-Other

                                                         原文:yuanhttp://www.visualstudio.com/zh-cn/explor ...