集合类
常用集合类有以下继承结构
1. Collection<–List<–{Vector,ArrayList,LinkedList}
2. Collection<–Set<–HashSet
3. Collection<–Set<–HashSet<–LinkedHashSet
4. Collection<–Set<–SortedSet<–TreeSet
5. Map<–SortedMap<–TreeMap
6. Map<–HashMap
LIst(列表),Map(映射),Set(集)
注意:这里的Collection,List,Set,Map都是接口,而不是
具体的类
List list = new ArrayList();
在这里,List是接口,ArrayList是才具体的类
List
- ArrayList: 代表长度可以改变的数组,可以对元素进行随机访问,向ArrayList中插入或删除元素的速度慢,直接用下标访问
- LinkedList:在实现中采用了链表的数据结构,插入和删除速度快,访问速度慢
- Vector:实现了动态数组
Set
Set是一个简单的集合,集合中中没有重复的对象,集合中存放的是对象的引用
4. HashSet:为快速查找而设计的Set,使用Hash的方法,存入HashSet的对象必须定义hashCode()
5. TreeSet:实现了SortedSet接口,能够对集合中的对象排序
6. LinkedHashSet:具有HashSet的查询速度,内部使用链表维护元素的顺序,因此可以用迭代器遍历该Set,输出次序为元素的插入次序
Map
将键对象和值对象映射的集合,它的每一个元素都包含一个key-value对,类似python的字典
7. HashMap
8. TreeMap
HashMap
系统将key-value对当作一个整体处理,系统根据Hash算法来决定key-value对的位置,该位置与value的取值无关,只和key值有关
另一点,当key或value表示的是对象的时候,map里实际存的是指向该对象的引用,而并非将对象保存在了map中,map所保存的数据存在栈中
引用类型的数组也是这样,数组里面保存的是指向对象的引用,而并非对象本身
public class Hash {
public static void main(String[] args){
HashMap<String, Double> map = new HashMap<>();
map.put("语文", 100.0);
map.put("数学", 5.0);
map.put("英语", 30.0);
System.out.println(map.get("语文"));
System.out.println(map.get("数学"));
System.out.println(map.get("英语"));
}
}
当系统执行
map.put("语文", 100.0);
时,系统会调用“语文”的hashcode()方法,得到一个hashcode值,然后决定该key-value对的存储位置
参考:
http://blog.csdn.net/caihaijiang/article/details/6280251
http://skyuck.iteye.com/blog/526358
http://developer.51cto.com/art/201309/410205_all.htm