黑马程序员——Java学习笔记之11——“Collection集合”总结


-----------  android培训 java培训 、期待与您交流! ------------

集合与数组的比较:
1、集合和数组都相当于容器,可以存储元素,且都有增删改查其中元素的操作方法。
2、数组一旦被创建,那么它的长度就固定了,但是集合在创建后,其长度是动态可变的。
3、每个数组只能存储一种类型的元素(Object类型的数组除外),而集合中可以存储各种类型的对象(除非用泛型来限定),在jdk1.5之后,由于自动装箱机制的出现,集合中也可以存储基本数据类型了。

使用IteratorListIterator来遍历集合:一般集合都可以返回Iterator对象用来遍历集合中的元素(Map集合可以通过得到keySet后,再使用Iterator遍历,或者得到entrySet后遍历)。不过在使用Iterator遍历list集合时,是无法进行增改操作的,所以List定义了自己的ListIterator来遍历集合,并实现上述操作。

Collection接口的常见子接口:
1、list接口规定了可以存储重复元素,内部存储一个有序的序列。所以我们可以使用此接口对list集合中的元素进行精确的定位和其他操作。它的常见实现类如下:
          ArrayList类,相当于一个长度可变的动态数组。它的常见操作跟数组及其相似。它一些属性特征也跟数组很相似,比如:查找,替换操作等效率比较高,但是插入删除操作的效率比较低。此集合中的元素可以实现随机访问。但是要注意:此集合是线程不安全的。它的应用实例如下:
          

          LinkedList类,相当于一个动态链表(其实是基于双向链表实现的)。它的常见操作跟链表也很相似。LinkedList集合的插入删除操作效率很高,但是查找效率比较低。此集合中的元素不具备随机访问性。要注意的是:此集合也是线程不安全的。另外用LinkedList可以模拟栈和队列。它 应用实例如下:
          

          Vector类,是基于数组实现的,它虽然是线程安全的,但是效率偏低,所以现在已经基本上被ArrayList代替了。

2、set接口规定了不能存储重复的元素,也不一定会根据添加元素的顺序来决定存储的顺序,也就是说,set集合可以实现乱序添加。对于怎么判断要添加的元素是否重复,则由set接口的实现类自己定义。
          HashSet类,是set接口最常见的实现类,它通过哈希算法来决定添加的元素在集合中的存储位置。所以HashSet集合拥有良好的存储性能和查询性能。HashSet不像HashTable那样不允许存储null,但是注意,HashSet集合中只允许存储一个null值。HashSet集合存储元素的机制是先用hashCode()函数得到元素对象的hash值,并判断当前hash值的位置是是否存在元素,如果存在,就调用equals()方法判断这两个元素对象是否是同一个对象,如果返回true,证明同一个对象,那么就只存一个。否则就是两个不同的对象,就将它们存储在同一个hash地址上,顺延存储。它的应用实例如下:
 

          TreeSet类,其实是基于二叉树的排序算法实现的。在存储对象,首先要使该类对象具备比较性,这里有两种方法,要么让该类对象所属类实现Comparable接口,使其具备比较性,并复写compareTo方法;要么,自定义一个比较器实现Comparator接口,并复写compare方法。如果这两种情况同时存在,就以比较器定义的比较顺序为准。然后根据比较返回值决定元素在TreeSet集合中的存储顺序。它的应用实例如下:



3、Map接口规定了能存储键值对元素,其实每个位置上存储的就是“键”和“值”的映射关系。对于Map中也是不允许存在相同键的元素的,因为“键”是保证Map集合中每个键值对唯一的重要保证。
          HashMap类,在这类集合中要保证每个键的唯一,其实现原理其实跟hashSet集合保证元素唯一性的机制是一样的。这类集合中元素存取速度快,但是它是线程不安全的。当然HashMap中也是允许存储null键和null值的。其应用实例如下:


         TreeMap类,该类集合中保证键唯一的原理和 TreeSet 一样。该集合中存储的对象同样要具备比较性。

          Hashtable类,跟HashSet实现原理相同,虽然它是线程安全的,但是由于效率较低,不允许存放 null 键,null 值,已被 HashMap 替代了。

          Properties,它是HashTable 的子类,所以是线程安全的,一般用于读写配置文件。通常配置文件的每一个键值对都用“=”连接,且两边一般都是字符串类型的。所以Properties 自定义了两个方法用来添加元素和获取元素值的方法来替代 put 和 get 方法。list 和 load 分别用来向配置文件中写数据和读数据。它的应用实例如下:



Collections工具类是专门用来操作集合的。它直接继承了Object类,跟Collection类没有关系。因为是工具类,所以这个类中提供了很多静态的字段和方法来操作集合。它的常见方法有以下几个。


----------- android培训java培训、期待与您交流! ------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值