您的位置:首页 > 编程语言 > Java开发

Java——Java集合概述

2017-08-14 10:47 141 查看
本文根据疯狂Java讲义(第3版)百度百科整理而成,感谢李刚老师

Java集合类是一种特别有用的工具类,可用于存储数量的对象,也可以实现常用的数据结构如栈、队列等。Java集合大致分为Set,List,Queue(三者均由Collection派生)和Map四种体系,其中Set表示无序,不可重复的集合,List表示有序,可以重复的集合,Queue用于模拟队列这种数据结构,Map则表示具有映射关系(键值对)的集合。

Java集合就像是一种容器,可以把多个对象(实际是对象的引用)放进容器中。Java 5之前,集合会丢失所放入对象的数据类型,把所有对象都当做Object类型处理;Java 5增加泛型,集合可以记住容器中对象的数据类型,从而可以编写出更简洁健壮的代码。

一、Java集合概述

1. Collection和Map体系结构

Java的集合类主要由两个接口派生而出,Collection和Map,Collection和Map是Java集合的根接口,这两个接口又包含了一些子接口或实现类。



上图为Collection接口,子接口及其实现的继承树。Collection为根接口,派生出三个子接口:Set、Queue和List。

子接口Set的实现类有HashSet,EnumSet,子接口有SortedSet,其中类HashSet有子类LinkedHashSet,子接口SortedSet有一个实现类是TreeSet。

子接口Queue的实现类有PriorityQueue(优先队列),子接口有Deque,其中子接口的实现类有ArrayDeque,LinkedList(也实现了List接口)。

子接口List的实现类有ArrayList,LinkedList,Vector。其中Vector有子类Stack。Vector类似于ArrayList,但是线程安全,Stack可作为数据结构栈。不过Vector和Stack比较古老,JDK1.0时就存在了,性能较差,现在不推荐使用这二者

常用的实现类有HashSet, TreeSet, ArrayList, ArrayDeque, LinkedList



上图是Map接口及其实现的继承树,所有的Map实现类用于保存具有映射关系的数据(也叫关联数组或键值对)。

Map接口的子接口有SortedMap,实现类有EnumMap,IdentityHashMap,HashMap,Hashtable,WeakHashMap。其中子接口SortedMap存在子类TreeMap,子类HashMap存在子类LinkedHashMap,Hashtable存在子类Properties。

常用的实现类有HashMap,TreeMap

2. Collection和Iterator接口

1.Collection接口是List,Set和Queue接口的根接口,该接口中定义的方法既可以用于List集合,也可以用于Set和Queue集合。Collection接口定义了如下操作集合元素的方法:

返回类型方法名称方法摘要
booleanadd(Obejct o)该方法用于向集合里添加一个元素。如果集合对象被佳添加操作改变了,则返回true,否则返回false。
booleanaddAll(Collection c)该方法把集合c里的所元素添加到指定集合里。如果集合对象被添加操作改变了,则返回true,否则返回false。
voidclear()清除集合里的所有元素,将集合长度变为0。
booleancontains(Object o)返回集合里是否包含指定元素
booleancontainAll(Collection c)返回集合里是否包含指定集合c里的所有元素
booleanisEmpty()返回集合是否为空。当集合长度为0时返回true,否则返回false。
Iteratoriterator()返回一个Iterator对象,用于遍历集合里的元素。
booleanremove(Object o)删除集合中的指定元素o,当即和里包含了一个或多个元素o时,该集合只删除第一个符合条件的元素,删除成功则返回true。
booleanremoveAll(Collection c)从集合里删除集合c里包含的所有元素(相当于调用该方法的集合减集合c),如果删除了一个或一个以上的元素,则方法返回true.
booleanretainAll(Collection c)从即合理删除集合c不包含的元素(相当于调用该方法的集合与c做交集),如果该集合改变,则返回true
intsize()该方法返回集合里元素的个数。
Obejct[]toArray()该方法把集合转换成一个数组,所有的集合元素变成对对应的数组元素。
感兴趣的同学可以移步 Java在线API中文文档 - 开源中国,有能力的同学可以查看 Java在线API英文文档 - 开源中国,查看API是编程人员应该掌握的一项基本技能,一定要学会哦。

// Collection示例代码(没有使用泛型)
public class CollectionTest {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("孙悟空被压了");
c.add(500);// 整数可以自动转化为响应的包装类型Integer
c.add("年");
System.out.println(c.isEmpty());
System.out.println(c.size());
System.out.println(c); // 直接输出集合c会自动调用集合的toString方法
System.out.println(c.toString()); //等同于上一句
System.out.println(c.contains(500));
c.clear();
System.out.println(c.isEmpty());
System.out.println(c);
System.out.println(c.contains(500));
}
}


2.Iterator接口也是Java集合框架的成员,但它与Collection系列,Map系列的集合不一样,Collection和Map系列用于盛装其他对象,而Iterator主要用于遍历(即迭代访问)集合中的元素。Iterator对象也被称为迭代器。Iterator接口隐藏了各种Collection实现类的底层细节,向应用程序提供了遍历Collection集合元素的统一编程接口。Iterator定义课如下四个方法:

boolean hasNext(): 如果被迭代的集合元素还没有遍历完,则返回true。

Object next(): 返回集合里的下一个元素。

void remove(): 删除集合里上一次next方法返回的元素。

void forEachRemaining(Consumer action): 这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达是来遍历集合元素。

// Iterator示例代码
public class IteratorTest {
public static void main(String[] args) {
Collection c = new ArrayList();
...// 添加String元素
Iterator it = c.iterator();
while (it.hasNext()) {
String s = (String)it.next();
System.out.print(book + " ");
}
}
}


3.使用foreach循环遍历集合元素:除了可以使用Iterator接口迭代访问Collection集合里的元素之外,使用Java 5提供的foreach循环迭代访问集合元素也很便捷。

// 使用Foreach循环迭代访问
public class ForeachTest {
public static void main(String[] args) {
Collection c = new ArrayList();
...// 添加String元素
foreach(Object obj: c) {
String s = (String)obj;
System.out.print(book + " ");
}
}
}


4.Java 8新增特性:使用Lambda表达式遍历集合,使用Lambda表达式遍历Iterator,使用Predicate操作集合,使用Stream操作集合。暂时还没有用到过,有时间再学习。

5.接下来逐一介绍Set集合,List集合和Map集合…

参考资料:

1. Java在线API中文文档 - 开源中国

2. JAVA集合类汇总 - hey平平

3. Java集合类详解 - 毛凡的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 集合