java集合类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java集合类
Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈、队列等;除此之外java集合还可用于保存具有映射关系的关联数组。
Java集合大致可以分为Set、List、Quequ和Map四种体系:
Set代表无序、不可重复的集合;
List代表有序、重复的集合;
Map代表具有映射关系的集合;
Queue体系集合,代表一种队列集合
Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称为对象)“丢进”该容器中。在java5之前,java集合会丢失容器中所有对象的数据类型,把所有对象都当成Object类型出来;从java5增加泛型以后,java集合可以记住容器中对象的数据类型,从而可以编写出更简洁、健壮的代码。
为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
集合类和数组不一样,数组元素既可以基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象(保存对象的引用变量)。
Java的集合类主要由两个接口派生而出:Collection 和Map,Collection和Map是java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
Set和list接口是collection接口派生的两个子接口,它们分别代表了无序集合和有序集合;Queue是java提供的队列实现。
Map实现类用于保存具有映射关系的数据。Map保存的每项数据都是key-value对,也就是由key和value两个值组成。(就像成绩单,每项成绩都是由两个值组成,即科目名和成绩。对于一张成绩表,科目通常不会重复,而成绩是可重复的,通常习惯根据科目来查阅成绩,而不会根据成绩来查阅科目)map里key是不可以重复的,key用于标识集合里的每项数据,如果需要查阅map中的数据时,总是根据map的key来获取。
Set,list,queue,map这4个接口,可以把java所有集合分成三大类,其中set集合类似于一个罐子,把一个对象添加到set 集合时,set集合无法记住添加这个元素的顺序,所以set里的元素不能重复(否则系统无法准确识别这个元素);list集合非常像一个数组,它可以记住每次添加元素的顺序、且list的长度可变。Map集合也像一个罐子,只是它里面的每项数据都是由两个值组成。
如果访问list集合中的元素,可以直接根据元素的索引来访问;如果访问map集合中的元素,可以根据每项元素的key来访问其value;如果访问set集合中的元素,则只能根据元素本身来访问(这也是set集合里元素不允许重复的原因)
对于set、list、Queue和map四种集合,最常用的实现类分别是HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList和HashMap、TreeMap等实现类。
Collection的用法有:添加元素、删除元素、返回collection集合中的元素个数以及清空整个集合等。Collection实现类都重写了toString()方法,该方法可以一次性的输出集合中的所有元素。
Java8为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法所需参数的类型是一个函数式接口,而Iterable 接口是Collection接口的父接口,因此Collection集合也可以直接调用该方法。
当程序调用Iterable的forEach(Consumer action)遍历集合元素时,程序会一次将集合元素传给Consumer的accept(T t)方法(该接口中唯一的抽象方法)。正因为Consumer是函数式接口,因此可以使用lambda表达式来遍历集合元素。
调用Iterable的forEach()默认方法来遍历集合元素,传给该方法的参数是一个Lambda表达式,该Lambda表达式的目标类型是Consumer。forEach()方法会自动将集合元素逐个的传给Lambda表达式的形参,这样Lambda表达式的代码体即可遍历到集合元素了。
Iterator接口也是java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。
Iterator接口里定义了如下4个方法:
●Boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回true.
●Object next():返回集合里的下一个元素
●Void remove():删除集合里上一次next方法返回的元素
●Void forEachRemaining(Consumer action),这是java8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集
合元素。
当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身并没有任何影响。
当使用Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只有通过Iterator的remove()方法删除上一次next()方法返回的集合元素才可以。
package testdemo;
import java.util.*;
public class CollectionTest {
public static void main(String[] args){
Collection books=new HashSet(); //创建一个集合
books.add("轻量级java企业应用实战");
books.add("疯狂java讲义");
books.add("疯狂Android讲义");
Iterator it=books.iterator(); //获取books集合对应的迭代器
while(it.hasNext()){
String book=(String)it.next(); //it.next()方法返回的数据类型是Object类型,因此吸引强制类型转换System.out.println(book);
if(book.equals("疯狂java讲义")){
it.remove(); //从集合中删除上一次next()方法返回的元素
}
book="测试字符串"; //对book变量赋值,不会改变集合元素本身
}
System.out.println(books);
}
}