Java基础之集合框架详解(一)

集合框架的相关定义

集合:即存储对象的容器。
框架:即类库的集合。
集合框架:即用来表示和操作集合的统一框架,由相关的接口、实现类和一些帮助程序员完成编程的算法。

集合的作用:

  • 在类的内部,对数据进行组织
  • 简单而快速的搜索大数量的条目
  • 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素
  • 有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型

集合与数组的区别:

  • 集合长度是可变的,数组长度是固定不变的
  • 集合中只能存储对象,不能存储基本数据类型,而数组中两者都可存储
  • 集合中存储的对象可以是任意类型的,而数组中只能存储同一类型的对象或同一基本类型的数据

相关说明:

  • 集合中可以存储任意类型的对象是因为,对象存入集合中都变成了Object类型,所以取出时要注意类型转换,当然也可以通过添加泛型来指定集合只能装载某一特定类型的对象。
  • 注意集合中只能存储对象,而当我们在集合中添加整形等基本数据类型时仍然能够编译成功,这是因为在JDK1.5以后添加了自动装箱拆箱的机制,int类型被自动装箱成为Integer类型,以此类推。

集合框架的构成

由于集合框架中的很多类功能是相似的,所以设计了大量接口来规范类,最重要的是两个根接口,Collection接口和Map接口
Collection接口下面又有三个重要的子接口:List接口、Queue接口、Set接口,这三个子接口对应着三个重要的实现类:ArrayList、LinkList、HashSet
Map接口对应一个重要的实现类:HashMap
Java中集合框架的构成

Collection接口

Collection接口中的一些共性方法:

添加方法:
- boolean add(Object e)—— 一次只能添加一个元素
- boolean addAll(Collection< extends E> c)—— 将一个参数容器中的所有元素添加到当前容器中

删除方法:
- boolean remove(Object e) 删除一个指定对象
- boolean removeAll(Collection<> c) 删除指定Collection中和本Collection中相同的元素
- void clear ():直接将集合中的元素清空

判断方法:
- boolean contains (Object)是否包含指定元素
- boolean containsAll(Collection<> c) 是否包含指定容器中的元素
- boolean imEmpty(): 是否有元素

获取元素个数:
- int size (),获取元素的个数

取交集:
- boolean retainAll(Collection<> c) 保留和指定collection集合中相同的元素,不相同的元素会被删除

将集合转成数组:
- Object[] toArray()

取出元素的方法(重点掌握)
- Iterator iterator()

迭代器Iterator

迭代器是一种设计模式,它是用于遍历集合类的标准访问方法,可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。内置在容器中,可以通过iterator()方法完成,该方法返回一个Iterator类型对象。
假如没有Iterator,客户端要遍历一个集合需要知道集合的数据结构,这样访问代码和集合是紧耦合,无法将访问逻辑从集合类与客户端访问代码中分隔开来,这样无疑是有很大问题的。
而Iterator的出现,将容器的取出方式和容器的数据结构分离,降低了耦合性。而取出方式因为直接在访问容器中的元素,并依赖具体的数据结构,所以被定义在了容器中。通过内部类在实现Iterator接口。

用法比较简单:
- 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
- 使用next()获得序列中的下一个元素。
- 使用hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新返回的元素删除。

例子:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class CollectionText {

    public static void main(String[] args) {

        Collection<String> collection = new ArrayList<String>();
        collection.add("a");
        collection.add("b");
        collection.add("c");
        collection.add("d");
        collection.add("e");

        Iterator<String> iterator = collection.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    }

}

技巧性掌握

明确具体集合对象名称的后缀:
- 如果后缀是List,都所属于List体系,通常都是非同步的。
- 如果后缀是Set,都所属于Set体系通常都是非同步的。
- 这些体系中的其他子类对象,后缀不是所属接口名的,一般都是同步的。这在常用子类对象中通用。

明确数据结构:
- 对于jdk1.2版本的子类对象。后缀名是所属的体系。前缀名就是数据结构的名称。
- ArrayList:看到Array,就要明确是数组结构;查询快
- LinkedList:看到Link,就要明确链表结构,就要想到add get remove和 first last结合的方法。增删快
- HashSet:看到hash ,就要明确是哈希表,查询快,而且所存储的对象具有唯一性。就要想到元素必须覆盖hashCode方法和 equals方法。
- TreeSet:就看到Tree,就要明确是二叉树,可以对元素排序;就要想到两种排序方式:自然排序:Comparable接口,覆盖compareTo(一个参数)java.lang。比较排序:Comparator接口,覆盖compare(两个参数):java.util。判断元素唯一性的依据就是比较方法的返回结果 return 0;

参考文章:
http://blog.csdn.net/watermusicyes/article/details/7985381
http://www.cnblogs.com/amboyna/archive/2007/09/25/904804.html
http://developer.51cto.com/art/201107/274951.htm

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值