您的位置:首页 > 编程语言 > Java开发

Java集合框架

2015-10-04 13:03 627 查看
集合类:

数组和集合类同是容器,有何不同?
1)数组的长度是固定的,集合长度是可变的。
2)数组中可以存储任意数据类型,集合只能存储对象。注意:集合中存储的是对象的地址
3)数组只能装同一种数据类型的数据

Collection接口的方法:
Object[] toArray():把集合转成一个数组,所有集合元素变成数组元素

Iterator接口的方法:
boolean hasNext():若被迭代的集合元素还有未被遍历的,返回true.
Object  next():返回集合的下一个元素.
void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)

Set接口的方法:
特点:无序,唯一

HashSet:
特点:
1)线程不安全的,多个线程访问一个HashSet要使用同步代码
2)HashSet集合元素值允许是null,但最多只能有一个
HashSet添加元素:
当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,判断已经存储在集合中的对象的hashCode值是否与添加的对象的hashCode值一致:
若不一致,则直接添加进去
若一致,再用equals方法比较,如果返回true,表明对象已经添加进去了,就不会再添加新的对象了,否则添加进去
说明:如果我们重写了equals方法,也要重写hashCode方法,反之亦然
TreeSet:
特点:TreeSet是根据元素的值进行排序的,而并不是根据元素的插入顺序排序的。

TreeSet会调用元素的compareTo(Object o)方法比较元素的大小,然后将集合里的元素按升序排列
注:此时需要排序元素的类必须实现Compareble接口,并覆写其int compareTo(Object o)方法

List接口的方法:
特点:有序,可重复

ArrayList
1,ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。
2,ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List list)函数返回一个线程安全的ArrayList类,也可以使用java.util.concurrent包下的CopyOnWriteArrayList类。
CopyOnWriteArrayList:是ArrayList的一个线程安全的变体,其中所有的可变操作(add、set等)都是通过对底层数组进行一次新的复制来实现的。
3,ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问。
4,允许任何的元素,包括null

Vector
1,Vector是基于数组实现的,
2,Vector的大部分public方法都是同步(synchronized)的,因此是线程安全的,当然性能也不如ArrayList
3,由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

Stack
1,Stack继承了Vector,也是同步的,实现了一个后进先出的栈。
2,Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。

LinkedList(双向链表)
1,LinkedList基于双向链表的数据结构,可以向前和向后遍历,插入数据时只需要记录本项的前后项即可,所以插入数度较快。
2,LinkedList没有同步方法,故多线程环境下用Collections.synchronizedList(List list)函数返回一个线程安全的LinkedList类
3,LinkedList可被用作栈(stack)、队列(queue)
4,允许null元素,

比较:
对于随机访问get和set,ArrayList比LinkedList块
对于插入和删除操作,LinkedList快
1)若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。
2)若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList。 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

Map接口的方法:
Set keySet():返回该Map中所有key所组成的Set集合
Collection values():返回Map里所有value组成的Collection
Set entrySet():返回Map所包含的key-value对所组成的Set集合,每个集合元素都是Map.Entry对象

Map.Entry:Map接口里面的一个内部接口,该接口用于封装key-value对,有3个方法:
Object getKey();返回Entry里包含的key值
Object getValue();返回Entry里包含的value值
Object setValue(Object value):设置Entry里包含的value值,并返回新设置的value值;

HashMap:线程不安全,速度快,允许存放null键,null值。

HashTable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代,无序存放

Properties:Hashtable的子类
Properties类的常用方法:
public Object setProperty(String key,String value):设置属性;
public String getProperty(String key):根据属性的名字取得属性的内容,如果没有返回null结果;
public String getProperty(String key,String defaultValue):根据属性的名字取得属性内容,如果没有则返回默认值(defaultValue);
void load(InputStream/Reader inStream)
void loadFromXML(InputStream in)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: