Java集合之概述
这是重新开始写博客的第一篇,开篇就讲Java集合的原因是集合在Java编程中是一种特别有用的工具类,Android还根据Java集合衍生出了一些更适合Android设备运行的子类。所以开篇就讲一下Java集合,至于为什么不讲Java基本语法以及面向对象这些,主要还是本人认为那些要么太基础,没什么讲的,要么就是思想,没到那个境界,讲了也只是懵懂,没多大作用。
什么是集合
什么是集合?我认为最容易理解集合的描述应该是这样:按照某种规则进行划分类别,把符合类别的东西统一放到一起(需要放到一起的时候放入,而不是强制性的),而盛放这些东西的容器就叫集合。比如街边的垃圾桶,分为可回收垃圾和不可回收垃圾,那两个桶就是集合。
集合的分类
Java集合大致分为Set、List和Map三种体系,其中Set是无序、不可重复的集合;List是有序可重复的集合;Map是一种映射关系的集合。从Java 5之后Java又新增了Queue体系集合,代表是一种队列集合(队列后面的博客会讲,目前理解就是排队一样的东西)。
不管哪个分类,Java集合都能够存放多个数据,这个多个是个不确定的数,所以就不能使用数组来存放,因为数组是固定长度的,定义太长的话会浪费资源,同时,数组也不能保存映射关系的数据,所以集合类就成了保存不定个数数据的不二之选。
Collection接口
Java集合类主要有两个接口派生而出:Collection和Map,Collection和Map是Java集合的根接口,这两个接口又定义了一些子类以及包装类,其中Set、Queue和List是Collection的子类或者包装类。
Collection接口定义了一系列操作集合的方法,比如add(Object o)、clear()、contains(Object o)、iterator()、remove(Object o)等等,这些都是一些基本的添加、删除、遍历、包含等等操作以及集合的基本信息。以上方法只是Collection接口方法中的一部分,想了解更多的请自己查看Java API文档吧,这里就不过多介绍了。
Iterator接口
Collection接口中有个方法是iterator(),返回的结果是一个Iterator对象,而Iterator是遍历集合用的,所以当需要遍历集合的时候一般都是通过集合的iterator方法产生一个Iterator对象,通过Iterator对象来遍历整个集合。
而Iterator接口也定义四个方法用来遍历:forEachRemaining()、hasNext()、next()、remove()。Iterator只用来遍历,本身并不提供存放数据的能力,所以当需要创建一个Iterator对象时必须要有一个集合。
需要注意的是:当Iterator正在遍历的时候,与Iterator对象相关联的那个集合对象里面的元素不能有变化,如果那个集合里的元素发生了变化,那么会抛出ConCurrentModificationException异常出来。所以Iterator是个非线程安全的类。
除了上面使用的Iterator来遍历集合外,在Java 5之后还有一种方法来遍历集合,那就是通过增强for循环来遍历,即foreach。
Collection students = new HashSet();
students.add("小方");
students.add("小李");
students.add("小王");
for(Object obj : students){
String student = (String)obj;
System.out.println(student);
if("小李".equals(student)){
students.remove(student);
}
}
当然,当用foreach遍历集合时,集合也是不能被改变的,改变了一样会出现ConCurrentModificationException异常。