Java中实现数据集合功能的一个框架:链表(list)数学集合(set)映射(map)
常用的集合类型:
线性表(list):一组有序元素的集合,可以使用整数索引来访问其中的元素
栈(stack):具备后进先出特性的集合
队列(queue):具备先进先出特性的集合
数学集合(set):一组没有重复元素的集合,通常具有很高的查询效率
映射(map):一组存放(键,值)对的集合,其中每一个键对应一个值
迭代器
允许用户以顺序的方式高效率的访问链表中每一个元素的一种特殊对象。
例如:
for-each循环的实现就是采用了迭代器。
迭代器是一种对象,它可以保存访问过列表过程中的当前位置,因此加快顺序访问列表 元素的速度,通常用迭代器来提高访问链表操作的效率。
抽象数据类型(ADT)
对某种数据类型以及该数据类型允许的各种操作的一个规定。
ADT规定了对某一类型的数据可以施加的各种操作,但是对这些操作的实现方法不做 任何限制。链表和数组都是列表这种ADT的实例,因为他们都提供了列表所支持的各种操作
例如:根据索引存取元素数据,在特定位置添加和删除元素等等。
在JAVA中,ADT都是通过interface来给出定义。ADT所支持的每一种操作都被定义为 接口上的一种方法。例如:LinkedList and ArrayList类都实现了java.util包中的List接口。
List接口声明了列表类型需要支持的各种方法。
在声明或者定义集合数据类型时,使用合适的ADT借口类型作为他们的类型往往比直接 使用特定的实现类做类型更好。
For example:
List<Integer> list=new LinkedList<Integer>();
//不能创建List类型的对象实例,但却将他保存在一个List接口类型的变量中。
//这是一种非常值得推荐的编程实践技巧,可以获得具体实现方法的灵活性
1: 链表(list)数学集合(set)映射(map)的比较 2: ------------------------------------------------------------------------------------------------------------------------------------------------- 3: ADT接口 实现 描述优点 缺点 使用实例 4: 和名称 5: ------------------------------------------------------------------------------------------------------------------------------------------------- 6: List ArrayList 元素按照插入顺序排序 查询速度慢 账户列表 等待队列 7: LinkedList 在任意位置插入元素也很慢 文件中的内容行 8: ------------------------------------------------------------------------------------------------------------------------------------------------- 9: Set HashSet 一组各不同的元素查询 没有索引 文中出现的单词 10: TreeSet 速度快 不能随机访问任意元素 彩票中的数字 11: ------------------------------------------------------------------------------------------------------------------------------------------------- 12: Map HashMap 一组‘键’和‘值’的关联 通用性不好 字数统计 13: TreeMap 不能方向从值获取到键 电话薄 14: -------------------------------------------------------------------------------------------------------------------------------------------------
数学集合
在JAVA集合框架中,有两个实现了Set接口的具体数学集合类:HashSet 和 TreeSet
HashSet是通用的数学集合类,TreeSet提供了一些额外的特性。
TreeSet:
其中的元素是以有序的方式保存在二叉搜索树中,二叉搜索树是一种用链接的方式组织 元素的数据结构,可以高效的进行添加,删除和查找操作,但是相对HashSet慢一些。