简介:
集合类Collection不是Java的核心类,是Java的扩展类。集合可以用来储存任何类型的对象,给程序员提供了代码编写的灵活性,但是同时也带来了类型安全的问题。JDK1.5集以上的版本支持Generics,这种新概念的提出改变了Java传统代码的编写方式。(Generics type)编程概念和技术应用于集合类,解决了集合类的类型安全问题,这可用于对任何数据类型的定义和操作。
集合和数组有了紧密的联系又有很多的不同之处。
集合和数组的相同之处:
1、它们都用来储存多个对象
2、有些集合类,例如ArrayList,实际上应用数组结构储存对象
集合类和数组的不同之处:
1、集合类是Java的扩充的API类,而数组是Java语言本身的数据结构
2、集合储存的对象是动态可变的,而数组的大小是静态不变的
3、集合只可用于储存对象,而数组可用来储存基本类型或者对象
4、集合一般使用方法,例如add(),或者iterator(),来添加或访问对象,而数组使用下标
5、集合可使用众多的方法,而数组可使用的方法较少
从整体的角度来看,集合类由两部分组成:Collection接口和Map接口。二级接口Set和List继承了Collection接口,并且导出三个常用的集合类HashSet、ArrayList、LinkedList
接口Map提供了两个常用的集合类:HaspMap、TreeMap
Collection和Map都包括在java。util包中。
Coll2ection定义接口类的基本方法,其二级接口Set与List是将集合类分为不同功能的两大类:Set(不允许有重复元素)、List(允许有重复元素)
虽然集合类有两个独立的接口构成,但是它们有着许多相同的集合操作方式,它们之间的不同在于对元素的储存方式。
1、Collection:定义对所有集合类操作的基本方法,例如size()/isEmpty()/contains()/add()/remove()/isterator()等15个方法,这是从Iterable接口继承而来。
2、Set:定义不允许重复元素和集合类的基本操作方法,集成Collection中的所有方法
3、List:定义允许重复元素的集合类的基本操作方法,继承了Collection‘中定义的所有方法,定义对一些方法的重载签名,增添了新的方法。
4、Map:定义对所有map集合类操作的基本方法,例如containsKey()/containsValue()/keySet()/put()/values()等14个方法,它本身就是一个根接口。
(1)ArrayList:数组式结构的集合类,其大小可自动调整,保持元素添加的位置,对元素的有序和随机访问非常有效,但不在结尾添加元素时效率不高
(2)LinkedList:与ArrayList相似,但应用链接式结构,不再结尾位置添加和删除元素非常有效
(3)HashSet:应用Hash码储存五重复元素的集合类,储存的元素必须完善hashCode()方法以保证其唯一性
我们在一般情况下,就可以把ArrayList和LinkedList看成是C语言中的数组和链表,它们的优劣性都可以参照一下。
Map接口中的常用类:
(1)HashMap:与HashSet相似,但它们属于不同的接口,以key-value一一对应的方式来储存无重复元素。
(2)TreeMap:与HashMap相似,但以树tree的数据结构储存元素,元素必须是key-value意义对应的方法储存,且自动按照key对象排序。
对于Map的KeySet()方法返回类型是Set,而Values()的返回类型是Collection。(应用性比较广)
下面两个程序,比较map中key-value的一一对应:
package connections; import java.util.HashMap; import java.util.Map; public class EmployeeMapTest { public static void main(String[] args) { Map<String, String> employeeMap = new HashMap<String, String>(); employeeMap.put("1000", "litianpeng"); employeeMap.put("115", "zuxiaoyu"); employeeMap.put("1102", "lihuanhuan"); //employeeMap.put("115", "surprise"); System.out.println(employeeMap); } }运行截图:
package connections; import java.util.HashMap; import java.util.Map; public class EmployeeMapTest { public static void main(String[] args) { Map<String, String> employeeMap = new HashMap<String, String>(); employeeMap.put("1000", "litianpeng"); employeeMap.put("115", "zuxiaoyu"); employeeMap.put("1102", "lihuanhuan"); employeeMap.put("115", "surprise"); System.out.println(employeeMap); } }运行截图:
可以看出来key=115的键值已经被替代了。
下面介绍Collection集合类:
1、ArraList:以数组作为实现的结构,氮元素不受固定空间的限制,是大小可变的数组,但是任何不再结尾处增添元素的操作,都需要移位,ArrayList可以接受任何Object对象作为它的元素,但不允许是基本类型,且对元素的访问和操作通过调用方法进行。
注意:系统预设ArrayList的元素数为10,可以指定ArrayList对象储存元素的大小,其空间将随着元素的增添和清除而自动增加或者减少。
2、LinkedList:链接表LinkedList与ArrayList相似,但应用节点node数据结构实现,因而提高了不再结尾处增添或者删除元素操作的效率。
3、HashSet:HashSet集合主要应用于简单快速、与检索有关的操作
HashSet与ArrayList和LinkedList相比,主要有下列不同的特点:
(1)应用hash表结构
(2)不允许有重复的元素
(3)元素是无序的,即按照哈希码储存
(4)自定义集合元素必须覆盖hashcode()方法来产生哈希码
4、Iterator:元素迭代器,在ArrayList和LinkedList中都提供方法iterator(),用来返回一个指定类型的元素迭代器Iterator对集合的引用,用来对各元素按次序遍历。
boolean hasNext():如果仍有元素,返回真,否则返回假
E next():返回下一个元素
void remove():删除迭代器当前指向集合中的元素
下面介绍Map集合类:
主要包括HashMap和TreeMap两大类,它们中的每一个元素必须应用一对key-value来储存。由key来映射value。
注意
(1)key与value必须是对象,而不允许是基本数据类型
(2)key在一个集合中必须具有唯一性,即key不允许有重复,但允许有重复的value出现
1、HashMap:HashMap实现Map接口,它利用Hash表结构,因而集合中的元素不按次序排列。
注意:系统预设HashMap的元素数目为16,也可以自己指定HashMap储存的元素数目。
由于HashMap不支持迭代器,可以利用keySet()方法,以set引用返回HashMap集合中所有的key,再利用元素迭代器对元素进行遍历,对元素的遍历,可以调用values()实现
2、TreeMap:TreeMap与HashMap相似,实现了Map接口,所有元素都是key-value的映射。两者之间的不同点在于
(1)TreeMap是应用于Tree数据结构储存key-value元素,而HashMap利用Hash表结构
(2)TreeMap集合中的各个映射单元是按照key自动排序的,而HashMap集合中的各映射单元是无序的
(3)TreeMap集合更加有效利用存储空间,而HashMap必须指定或者使用预设映射单元存储空间