java集合框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java集合框架相关的知识,希望对你有一定的参考价值。
Java集合框架--参照博客园优秀文章整理
一、概述:
位于 java.util 这个包下,Java集合框架就是一套工具,它把常用的数据结构和算法集合在一起,让我们能更轻松地、更高效地处理数据。
集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。
当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型
Java的集合框架主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。即Java中容器分两类,一种是单值的Collection,一种是储存键-值对的Map
注:
Set、List和Map可以看做集合框架的三大接口。
List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。
Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。
对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayList和HashMap三个实现类。
二、Collection接口
Collection: Set和List接口是Collection接口派生的两个子接口。即单一个体组成的集合,每个单位只能包含一个元素。
Collection基本操作:
增加元素add(Object obj); addAll(Collection c);
删除元素 remove(Object obj); removeAll(Collection c);
求交集 retainAll(Collection c);
删除元素 remove(Object obj); removeAll(Collection c);
求交集 retainAll(Collection c);
访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)
1 Public interface Iterator{ 2 Public Boolean hasNext(}; 3 Public Object next(}; 4 Public void remove(}; 5 6 }
集set
--没有重复项目的集合
(常用有两种:HashSet和TreeSet,其内部实现是一个Map,它的元素就相当于Map中的Key,而Value是一个Object常量,所有对Set的操作都被最终转嫁为对Map的操作)
HashSet-基于散列表的集,加进散列表的元素要实现hashCode()方法
清单List
--位置性集合。加进清单的元素可以加在清单中特定位置或加到末尾
ArrayList:数据列表,其实就是封装了一个数组,因此它的访问速度极快
ArrayList类似于Vector,都用于缩放数组维护集合。
ArrayList和Vector区别:
(1)同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
(2)数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
LinkedList:内部实现是带头结点的双向链表,适合于在链表中间需要频繁进行插入和删除操作
用在FIFO,用addList()加入元素 removeFirst()删除元素
用在FILO,用addFirst()/removeLast()
Map: Map实现类用于保存具有映射关系的数据(key-value)。即一对有关联的个体组成的集合,每个单位都是一对相关联的元素。
三、Map接口
映射表Map
--用于关键字/数值对,像个Dictionary
处理Map的三种集合
关键字集KeySet()
数值集value()
项目集enrySet()
四个具体版本
HashMap-散列表的通用映射表
LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序
WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它
TreeMap-基于平衡树的映射表
四、相关知识:
迭代器(Iterator)
提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
对于遍历一个容器中所有的元素,Iterator模式是首选的方式
Collection定义了Iterator<E> iterator()方法,子类都各自实现了该方法,我们直接调用即可
Map中虽没有定义,我们可以利用map.entrySet()的iterator()方法
以上是关于java集合框架的主要内容,如果未能解决你的问题,请参考以下文章