Java集合框架
引言:
集合框架用来
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示和操作集合的一组接口与类。如数组、列表和队列等。 一个集合(也称容器)是指将一组元素组合成一个单元的简单对象。 集合用于存储、取回、操作和传递这些聚合的元素。
1、集合框架的概念
集合框架:是为表示和操作集合而规定的一种统一的、
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
的体系结构。 任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。 接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。 算法:在一个实现了某个集合框架中的接口的对象上,完成某种有用的计算的方法,例如查找、排序等。
集合框架对编程有什么好处呢,
提高程序设计效率。
提高程序速度和质量。集合框架通过提供对有用的数据结构和算法的高性能和高质量的实现使你的程序速度和质量得到提高。
集合框架鼓励软件的复用。对于遵照标准集合框架接口的新的数据结构是可复用的。 2、Java语言中的集合
Java2的集合框架,主要有三个接口:List、Set和Map。其中,List和Set继承了Collection,而Map则独成一体。
用“集合框架”设计软件时,记住该框架四个基本接口的层次结构关系会有用处: Collection 接口是一组允许重复的对象。
Set 接口继承 Collection,但不允许重复。
List 接口继承 Collection,允许重复,并引入位置下标。
Map 接口既不继承 Set 也不继承 Collection。
Java 2 框架主要有六个集合实现:
集合的使用示例:
说明:
为演示具体 Set 类的使用,下面的程序创建了一个 HashSet,并往里添加了一组名字,其中有个名字添加了两次。
程序把集中名字的列表打印出来,演示了重复的名字没有出现。接着,程序把集作为 TreeSet
来处理,并显示有序的列表。
import java.util.*; public class SetExample { public static void main(String args[]) { Set set = new HashSet(); set.add("Bernadine"); set.add("Elizabeth"); set.add("Gene"); set.add("Elizabeth"); set.add("Clara"); System.out.println(set); Set sortedSet = new TreeSet(set); System.out.println(sortedSet); 运行结果: [Bernadine, Gene, Clara, Elizabeth] } [Bernadine, Clara, Elizabeth, Gene] }
3、Collection接口
该接口支持添加和除去等基本操作。设法除去一个元素时,如果这个元素存在,除去的仅仅是集合中此元素的一个实例。
boolean add(Object element)
boolean remove(Object element)
Collection 接口还支持查询操作:
int size()
boolean isEmpty():是否为空
boolean contains(Object element) Iterator iterator();获得Iterator对象
要么是作用于元素组的任务,要么是同时作用于整个集合的任务。
boolean containsAll(Collection collection) boolean addAll(Collection collection) void clear()
void removeAll(Collection collection) void retainAll(Collection collection)
containsAll方法:允许您查找当前集合是否包含了另一个集合的所有元素,即另一个集合是否是当前集合的子集。
addAll方法:确保另一个集合中的所有元素都被添加到当前的集合中,通常称为并。 clear方法:从当前集合中除去所有元素。
removeAll:方法类似于 clear() ,但只除去了元素的一个子集。
retain All 方法:类似于 removeAll() 方法,它从当前集合中除去不属于另一个集合的元素,即交。
Iterator 接口的用法说明
Java的集合框架给出了一个Iterator可以操作一个Collection,而不需知道这个Collection的具体实现类型是什么。
Collection 接口的 iterator() 方法返回一个 Iterator。使用 Iterator 接口方法,可以从头至尾遍历集合。
用法举例:
Collection collection = ...;
Iterator iterator = collection.iterator(); while (iterator.hasNext()) {
Object element = iterator.next();
…
}
4、Set接口
Set接口扩展了 Collection 接口,且根据定义它也禁止在集合中出现重复元素。它采用所有原始方法,并且未引入任何新方法。
集合框架为 Set 接口提供了两种通用实现:HashSet 和 TreeSet。
HashSet 来存储不重复的集合。
当需要以一种排序的方式从集合中提取元素的时候,TreeSet 实现很有用。为了正确运行,添加到 TreeSet 中的元素必须是可排序的。通常将元素添加到 HashSet ,然后将该集合转换成一个 TreeSet 进行排序遍历,这样更快一些。
5、List接口
List接口对Collection进行了简单的扩充,可以将任何东西放到一个List容器中,并在需要时从中取出。
次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素。
可以在List中间插入和删除元素。
它的具体实现类常用的有ArrayList和LinkedList。在具体应用时可以根据需要自由选择。 (1)ArrayList
从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快。 它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。 特点:底层为数组,删除插入效率低,查询效率高。
ArrayList遍历有两种遍历方式,非通用方式,即通过size()方法,for循环。
ArrayList al = new ArrayList();
al.add(new Integer(10000));
al.add(new Integer(200000));
al.add(new Integer(1000000));
for(int i = 0; i < al.size(); i++)
{
System.out.println(al.get(i));
}
通用方式,即用迭代器。
printCollection(Collection c){
Iterator it = c.iterator();
while(it.hasNext())
{
it.next();
}
}
(2)LinkedList
LinkedList: LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。
LinkedList,可用于构建堆栈,或者队列。底层为双向循环链表:
可以双向找到前后的节点,最后头尾链接,形成一个环状。
特点:查寻效率低(从头节点遍历),插入删除效率高。
它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
import java.util.*; class MyStack { private LinkedList ll=new LinkedList(); public void push(Object o) { ll.addFirst(o); } public Object pop() { return ll.removeFirst(); } public boolean empty() { return ll.isEmpty(); } public static void main(String[] args) { MyStack ms=new MyStack(); ms.push("one"); ms.push("two"); ms.push("three"); System.out.println(ms.pop()); System.out.println(ms.pop()); System.out.println(ms.empty()); } }
6、Map接口
Map接口与Collection接口无关系,它表示的集合,内部每个元素是一个键-值对。 对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性。
Map有两种比较常用的实现:HashMap和TreeMap。HashMap也用到了哈希码的算法,以便快速查找一个键,TreeMap则是对键按序存放,因此它便有一些扩展的方法,比如firstKey(),
lastKey()等,可以从TreeMap中指定一个范围以取得其子Map。
键和值的关联很简单,用put(Object key, Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。
注意:把一系列对象通过一个关键字来存放,key不能重复,value可重复。
Map m = new HashMap();
put(Object key, Object value);//存放键和值,返回值为Object。
遍历方法:通过Map接口提供的keySet()方法,会返回一个Set类型无序集合,存放着key
对象(KEY不重复,所以是一个Set)。
Set s = m.keySet();
Iterator it = s.iterator();
while(it.hasNext()){
Object key = it.next();
Object value = m.get(key);
}
集合框架总结:
1、 List(有序), Set(无序), Map(键值) 2、对于TreeMap和TreeSet,只在需要排序时,使用一下,因为他们每次插入新元素,都会
重新排序。