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)
相关文章推荐
- 开源 java CMS - FreeCMS2.3员
- Java多线程8:wait()和notify()/notifyAll()
- Java中的异常
- JAVA同步回调函数
- Java ArryList
- C#和JAVA GET,SET对比
- java自动装箱与拆箱
- [置顶] Java内存分析 --- 虚拟机运行时数据区
- 自定义spring日志拦截
- JAVA IO处理流
- MyEclipse 2014 破解图文详细教程
- Java中有关Null的9件事
- Eclipse插件本地扩展安装
- 封装一个素数方法,在使用散列表时需要预置大小,需要用到这个方法
- 成员变量、类变量、局部变量的区别
- 图片数字时钟
- Java设计模式之剩下的模式
- Struts2的package的的命名空间(默认命名空间与根命名空间)
- 一起学spring--依赖注入---简单粗暴的例子展示
- javaWeb中解决中文乱码问题