Java集合容器全面分析

简介:

集合类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必须指定或者使用预设映射单元存储空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值