Java集合类
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用方法(详见API)
方法
add(Object o) add(int index, Object o) get(int index) remove(int index)
方法说明
将指定的元素添加到此列表的尾部 将指定元素插入到此列表中的指定位置 返回此列表中指定位置上的元素 移除此列表中指定位置上的元素
List接口
顺序是List 最重要的特性;它可保证元素按照规定的顺序排列 。List 为Collection 添加了大量方法,以便我们在List 中部 插入和删除元素(只推荐对LinkedList 这样做)。List 也会生 成一个ListIterator(列表反复器),利用它可在一个列表里朝 两个方向遍历,同时插入和删除位于列表中部的元素(同样地, 只建议对LinkedList 这样做)。 List的具体实现类常用的有ArrayList和LinkedList。 —ArrayList从其命名中可以看出它是一种类似数组的形式 进行存储,因此它的随机访问速度极快。 —LinkedList的内部实现是链表,它适合于在链表中间需 要频繁进行插入和删除操作。
Map接口
Map是一种把键对象和值对象进行关联的容器。 对于键对象来说,像Set一样,一个Map容器中的键对象不允许重 复,这是为了保持查找结果的一致性。
键和值的关联很简单,用put(Object key, Object value)方法 即可将一个键与一个值对象相关联。用get(Object key)可得到 与此key对象所对应的值对象。
集合类概述
新的集合库考虑到了“容纳自己对象”的问题,并将其分割成两 个明确的概念: 集合(Collection):一组单独的元素,通常应用了某种规则。 在这里,一个List(列表)必须按特定的顺序容纳元素,而一个 Set(集)不可包含任何重复的元素。 映射(Map):一系列“键-值”对。从表面看,这似乎应该成 为一个“键-值”对的“集合”,但假若试图按那种方式实现它, 就会发现实现过程相当笨拙。另一方面,可以方便地查看Map 的 某个部分。只需创建一个集合,然后用它表示那一部分即可。这 样一来,Map 就可以返回自己键的一个Set、一个包含自己值的 List 或者包含自己“键-值”对的一个List。和数组相似,Map 可方便扩充到多个“维”,毋需涉及任何新概念。只需简单地在 一个Map 里包含其他Map(后者又可以包含更多的Map,以此类 推)。
HashMap与HashTable区别
Hashtable继承Map接口,实现一个key-value映射的哈希表。任 何非空(non-null)的对象都可作为key或者value。 HashMap继承Map接口,实现一个key-value映射的哈希表。任何 对象都可作为key或者value。
Iterator(迭代器)
size()Biblioteka Baidu
set(int index, Object o) contains(Object o)
返回此列表中的元素数
用指定的元素替代此列表中指定位置上的 元素 如果此列表中包含指定的元素,则返回 true
List接口->LinkedList类
LinkedList是List接口的链接列表实现。 在一般情况下,LinkedList和ArrayList在操作上非常相似,它们仅仅
Map比较常用的实现是HashMap,HashTable。
Map中常用方法
方法名
clear() containsKey(Object key) get(Object key) isEmpty() keySet() put(Object key, Object value) remove(Object key) size()
Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。第一次 调用Iterator的next()方法时,它返回序列的第一个元素。注意: iterator()方法是java.lang.Iterable接口,被Collection继承。 (2) 使用next()获得序列中的下一个元素。 (3) 使用hasNext()检查序列中是否还有元素。 (4) 使用remove()将迭代器新返回的元素删除。 Iterator是Java迭代器最简单的实现,为List设计的 ListIterator具有更多的功能,它可以从两个方向遍历List,也 可以从List中插入和删除元素。
Java集合类
主要内容
集合类概述 Collection接口 List接口-Vector类、ArrayList类、LinkedList类 Set接口-HashSet类
Map接口-HashMap类、TreeMap类
Iterator(迭代器)
集合类概述
为容纳一组对象,最适宜的选择应当是数组。而且假如容纳 的是一系列基本数据类型,更是必须采用数组。当我们编写程序 时,通常并不能确切地知道最终需要多少个对象。有些时候甚至 想用更复杂的方式来保存对象。为解决这个问题,Java 提供了 集合类库。 使用Java 集合的“缺点”是在将对象置入一个集合时丢失 了类型信息。之所以会发生这种情况,是由于当初编写集合时, 那个集合的程序员根本不知道用户到底想把什么类型置入集合。 若指示某个集合只允许特定的类型,会妨碍它成为一个“常规用 途”的工具,为用户带来麻烦。为解决这个问题,集合实际容纳 的是类型为Object 的一些对象的句柄。
有一点点区别:
ArrayList在尾部插入数据的效率比LinkedList高,LinkedList 更适用于随机地在任意位置添加删除数据。
LinkedList提供了对尾部和头部的添加与删除操作方法。相比
较ArrayList而言,多出的方法如下页表所示。
常用方法(详见API)
方法名
void addFirst(E e) void addLast(E e) E getFirst() E getLast() E removeFirst() E removeLast()
方法说明
将指定元素插入到此列表的开头 将指定元素添加到此列表的结尾 返回此列表的第一个元素 返回此列表的最后一个元素 移除并返回此列表的第一个元素 移除并返回此列表的最后一个元素
Set接口
Set 拥有与Collection 完全相同的接口,所以和两种不同的 List 不同,它没有什么额外的功能。相反,Set完全就是一个 Collection,只是具有不同的行为(这是多态最理想的应用:用 于表达不同的行为)。添加到Set 的每个元素都必须是独一无二 的;添加到Set 里的对象必须定义equals(),从而建立对象的唯 一性。Set 拥有与Collection 完全相同的接口。一个Set 不能 保证自己可按任何特定的顺序维持自己的元素。
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速 插入,删除元素,应该使用LinkedList,如果需要快速随机访问 元素,应该使用ArrayList。 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考 虑非同步的类(ArrayList、HashMap),其效率较高,如果多个 线程可能同时操作一个类,应该使用同步的类(Vector、 HashTable)。 要特别注意对哈希表的操作,作为key的对象要正确复写equals 和hashCode方法。 尽量返回接口而非实际的类型,如返回List而非ArrayList,这 样如果以后需要将ArrayList换成LinkedList时,客户端代码不 用改变。这就是针对抽象编程。
Collection接口
Collection是个java.util下的接口,它提供了对集合对象 进行基本操作的通用接口方法。它有三个基本的方法: boolean add(Object obj): 用于将一个对象放入到集合中,当 原有Collection对象改变后,它返回true; boolean addAll(Collection col): 将另一个Collection对象中 的所有元素插入该Collection对象中,当目标Collection对象改 变后,它将返回true; Iterator iterator(): 它将返回一个Iterator(遍历器)接口 对象。
List接口->Vector类
Vector非常类似ArrayList,但是Vector是同步的。由 Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同 一接口,但是,因为Vector是同步的,当一个Iterator被创建而 且正在被使用,另一个线程改变了Vector的状态(例如,添加或 删除了一些元素),这时调用Iterator的方法时将抛出 ConcurrentModificationException,因此必须捕获该异常。
方法说明
清空Map 如果此Map的key中包含指定的key,则返回true 返回指定键所映射的值,如果此映射不包含该 键的映射关系,则返回null 如果此Map内没有任何数据,则返回true 将此Map中的所有key放置在一个set中返回 将键值对放入Map中 将指的key及其对应值从Map中除去 Map中数据的数目
List接口->ArrayList类
ArrayList是List接口的大小可变数组的实现。允许包括null在 内的所有元素。 每个ArrayList实例都有一个容量。该容量是指用来存储列表元 素的数组的大小,它总是至少等于列表的大小。随着向 ArrayList中不断添加元素,其容量也自动增长。
HashSet是Set的一种实现,这种实现中一般要求放入 的元素覆写hashCode方法。除此之外其使用方式与 ArrayList类似,有一些小区别: (1)HashSet不允许放入重复元素 (2)HashSet不能借助Collections类进行排序 (3)HashSet的方法没有ArrayList丰富