Java集合框架
来源:互联网 发布:上古卷轴5ece捏脸数据 编辑:程序博客网 时间:2024/06/06 14:13
Java Collections Framework(Java集合框架)是Java提供的对集合进行定义,操作和管理的包含一组接口,类的体系结构。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
所有的集合类都位于java.util包下。
Java集合框架的基本接口/类层次结构:
java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +--java.util.LinkedList [C] +--java.util.Vector [C] +--java.util.Stack [C]+--java.util.Set [I] +--java.util.HashSet [C] +--java.util.SortedSet [I] +--java.util.TreeSet [C]java.util.Map [I]+--java.util.SortedMap [I] +--java.util.TreeMap [C]+--java.util.Hashtable [C]+--java.util.HashMap [C]+--java.util.LinkedHashMap [C]+--java.util.WeakHashMap [C]
[I]:接口
[C]:类
Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object的集合,这些Object称为Collection的元素。Collection是一个接口,用于提供规范化定义,不能被实例化使用。
Interface Iterator——迭代器接口,这是Collection的父接口,只有iterator()这一个方法,它返回一个代表当前集合对象的泛型< T >迭代器,用于之后的遍历操作。所有的Collection集合对象都实现了这个接口,因此所有的Collection集合对象都具有foreach可遍历性。典型的遍历方法如下:
Iterator it = collection.iterator(); //获得一个迭代子while(it.hasNext()){ Object obj = it.next(); //得到下一个元素}
根据用途的不同,Collection又分为List和Set。
List
List继承自Collection接口,代表一个元素有序、可重复的接口,集合中所有元素都有其对应的顺序索引,用户可以使用索引来添加、删除或访问集合中的元素。
除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加、删除、设定元素, 还能向前或向后遍历。
实现List接口的常用类有ArrayList,LinkedList,Vector,Stack。Set
Set同样继承自Collection接口,与List不同,Set中的元素具有无序性和不可重复性(类似数学概念中的集合),换句话说,Set中最多只有一个null元素,且Set集合中任意两个元素e1,e2都满足
e1.equals(e2)==false;
Map接口
Map与Collection是两种不同的集合,Collection可以看作是value的集合,Map则看作是(key,value)的键值对集合,其中key集合的元素不能重复。
实现Map接口的常用类有HashTable,HashMap,LinkedHashMap,WeakHashMap。
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
在除需要排序时使用TreeSet,TreeMap外,都应使用HashSet,HashMap,因为他们的效率更高。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。一旦将对象置入容器内,便损失了该对象的型别信息。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
注意:
1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)…。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
HashMap会利用对象的hashCode来快速找到key。
6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。
为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。
参考
http://www.cnblogs.com/LittleHann/p/3690187.html
http://blog.sina.com.cn/s/blog_a345a8960101k9vx.html
- Java集合:集合框架
- 【Java】java集合框架
- [Java]Java集合框架
- JAVA集合框架和集合
- 【集合】Java集合框架介绍
- Java集合之集合框架
- [集合]Java的集合框架 Collection集合
- Java集合框架 (一)
- Java集合框架 (二)
- Java集合框架(三)
- Java集合框架
- 也来谈Java集合框架
- 也来谈Java集合框架
- Java集合框架 (一)
- Java集合框架
- 也来谈Java集合框架
- java集合框架
- Java集合框架总结
- ios开发 使用系统相册和相机
- sdut2605——A^X mod P
- IMWeb训练营-ToDoList
- SQL缓存的命令 l或list,/或r,n,del n,a,c
- POJ 3669 Meteor Shower(bfs)
- Java集合框架
- PCB布线规则
- 【寒江雪】静态测试之代码分析
- C++抽象编程——递归策略(2)——子集和问题
- ReactNative实现emoji表情图文混排方案
- .....数组操作
- C++远征之封装篇——字符串类型
- 一条过之 一条SQL搞定信息增益的计算
- 交叉熵代价函数(cross-entropy cost function)