1.Collection 接口
Collection 是最基本的集合接口, 声明了适用于 JAVA(List 和 Set)集合的通用方法
collection 接口的方法: add(),clear(),iterator(),remove(),toArray()等(详细查阅 API).
Iterator 接口声明方法: hasNext(),next(),remove().
2.Set(集合)
Set 是最简单的一种集合, 无序, 没有重复对象.
Set 接口主要实现了两个实现类:
HashSet: 内部封装的是 HashMap 的方法, HashSet 类按照哈希算法来存集合中的对象其实是存到了 HashMap 的键的位置, 存取速度比数组更快.
原理: 当元素需要存进哈希表之前, 先会计算这个元素的哈希值, 存到对应的位置上, 当其他的元素与前面元素哈希值相同 时, 会去使用 equals 方法进行判断, 两个元素的内容是否一致, 如果内容不一致, 则使用拉链法存储元素. hashCode() equals()
TreeSet:TreeSet 类实现了 SortedSet 接口, 能够对集合中的对象进行排序, 使用二叉树结构.
原理: 使用对象的比较方法, 如果对象的比较方法返回为 0, 则视为元素重复, 则不存储.
Set 的用法: 存放的是对象的引用, 没有重复对象.
3.List(列表)
List 的特征是其元素以线性方式存储, 集合中可以存放重复对象.
List 接口主要实现类包括:
AarrayList(): 数据结构: 长度可变 (创建新数组 + 复制数组) 数组, 查询快, 增删慢, 不同步.
LinkedList(): 链接列表: 增删快, 查询慢, 不同步.
LinkedList 具有以下方 法: addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得 LinkedList 可以当作堆栈, 队列和双向队列使用.
堆栈: 先进后出 First In Last Out 队列: 先进先出 First In First Out
4.Map(映射)
map 是一种把键对象和值对象映射的集合, 他的每一个元素都包含一对键对象和值对象. Map 没有继承于 Collection 接口, 从 Map 集合中检索元素时候, 只要给出键对象, 就会返回对应的值对象.
map 中的方法:
put(键, 值): put 方法返回的 value 是返回键对应的旧值, 如果没有则返回 null,map 集合如果键相同, 值就会覆盖.
get(键): 通过给定的键获取对应的值, 如果键不存在, 返回 null.
remove(键): 删除元素, 一次删一对
获取 map 集合中的所有的数据:
1.keySet(): 获取 map 中所有的键, 方法返回 set 集合, 因为 map 中的键是惟一的.
有了所有的键, 便可以通过迭代器或者使用 foreach 取出其中所有的值.
2.entrySet(): 返回 set 集合, Set<Map.Entry<K,V>>.
例: Set<Map.Entry<String,String>> entrySet = map.entrySet();
- // 用迭代器
- Iterator<Map.Entry<String,String>> it= entrySet.iterator();
- while(it.hasNext()){
- // 遍历 set 集合中的映射关系
- Map.Entry<String,String> me = it.next();
- // 通过映射关系获取所有的键和值
- String key =me.getKey();
- String value=me.getValue();
- }
- // 用 foreach
- for(Map.Entry<String,String> me : map.entrySet()){
- String key =me.getKey();
- String value = me.getValue();
- }
map 中的实现类:
Hashtable: 数据结构: 哈希表, 同步的(效率低), 不允许有 null 作为键和值
HashMap: 数据结构: 哈希表, 允许有 null 作为键和值, 不同步
TreeMap: 数据结构: 二叉树结构, 不同步, 查看 "键" 或 "键值对" 时, 它们会被排序(次序由 Comparabel 或 Comparator 决定).
5. 关系特征总结:
Collection :
--List: 将以特定次序存储元素. 所以取出来的顺序可能和放入顺序不同.
--ArrayList / LinkedList / Vector
--Set: 不能含有重复的元素
- --HashSet / TreeSet
- Map:
- --HashMap
- --HashTable
- --TreeMap
特征:
List,Set,Map 将持有对象一律视为 Object 型别.
Collection,List,Set,Map 都是接口, 不能实例化.
继承自它们的 ArrayList, Vector, HashTable, HashMap 是具象 class, 这些才可被实例化.
总结:
1. 如果涉及到堆栈, 队列等操作, 应该考虑用 List, 对于需要快速插入, 删除元素, 应该使用 LinkedList, 如果需要快速随机访问元素, 应该使用 ArrayList.
2. 如果程序在单线程环境中, 或者访问仅仅在一个线程中进行, 考虑非同步的类, 其效率较高, 如果多个线程可能同时操作一个类, 应该使用同步的类.
3. 在除需要排序时使用 TreeSet,TreeMap 外, 都应使用 HashSet,HashMap, 因为他们 的效率更高.
4. 要特别注意对哈希表的操作, 作为 key 的对象要正确复写 equals 和 hashCode 方法.
- Reference:
- https://blog.csdn.net/SpeedMe/article/details/22398395?utm_source=distribute.pc_relevant.none-task
来源: https://www.qcloud.com/developer/article/1588412