前段时间一直在忙一个物联网的项目,所以Java的学习一直搁置,从今天开始继续学习!望大家多提宝贵意见!
java.util包中包含了一些在Java 2中新增加的最令人兴奋的增强功能:类集。一个类集(collection)是一组对象。类集的增加使得许多java.util中的成员在结构和体系结构上发生根本的改变。它也扩展了包可以被应用的任务范围。Java的类集(Collection)框架使你的程序处理对象组的方法标准化。在Java 2出现之前,Java提供了一些专门的类如Dictionary,Vector,Stack和Properties去存储和操作对象组。尽管这些类非常有用,它们却缺少一个集中,统一的主题。因此例如说使用Vector的方法就会与使用Properties的方法不同。以前的专门的方法也没有被设计成易于扩展和能适应新的环境的形式。而类集解决了这些(以及其他的一些)问题
Java类集框架的优势:
1) 这种框架是高性能的。对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般很少需要人工去对这些“数据引擎”编写代码(如果有的话)。
2) 框架允许不同类型的类集以相同的方式和高度互操作方式工作。
3) 类集是容易扩展和/或修改的。为了实现这一目标,类集框架被设计成包含一组标准的接口。对这些接口,提供了几个标准的实现工具(例如LinkedList,HashSet和TreeSet),通常就是这样使用的。如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可以使你自己的类集实现更加容易。
4) 增加了允许将标准数组融合到类集框架中的机制。
类集的整体框架如下:
Collection接口是构造类集框架的基础。它声明所有类集都将拥有的核心方法。因为所有类集实现Collection,所以熟悉它的方法对于清楚地理解框架是必要的。
boolean add(E e):向集合中增加元素,如果该类型集合允许有重复元素(如:ArrayList、LinkedList等)或者不允许有重复元素但新添加的元素不在集合中则返回true,如果该类型集合不允许有重复元素并且新添加的元素已经在集合中则返回false。
boolean addAll(Collection<? extendsE> c):将一个类集c中的所有元素添加到另一个类集(本类集)。
void clear():清除本类集中所有元素,调用完该方法后本类集将为空。
boolean contains(Object o):如果本类集包含元素e,并且满足(o==null ?e==null : o.equals(e))则返回true,否则返回false。
boolean containsAll(Collection<?> c):如果本类集包含指定类集c中的所有元素则返回true,否则返回false。
boolean equals(Object o):如果本类集的equals方法是我们自己重写的,则具体两个类集怎样才算equal(是引用相等还是值相等且顺序相同),我们自己决定。如果类集的equals方法不是我们重写的,则当两个类集类型为List(包括ArrayList和LinkedList,元素可以重复)时,必须两个类集的元素个数相等,元素顺序相同,且相同位置的元素对应相等才返回true,否则返回false;当两个类集类型为Set(包括HashSet和TreeSet,元素不能重复)时,只须两个类集的元素个数相等,并且一个类集中的任一个元素在另一个类集中都能找到相同的元素(不必顺序相同,因为Set是无序的),则返回true,否则返回false。
int hashCode():返回本类集的hash code值,具体算法依赖于类集中元素的值和类型,在后面的讨论中会讲到。
boolean isEmpty():若本类集没有元素则返回true,否则返回false。
Iterator<E> iterator():返回本类集中所有元素的迭代函数,至于从该函数中取出的元素的顺序依赖于本类集的类型,若为List则按List的顺序取出,若为Set则无序。
booleanremove(Object o):若本类集中有值与o的值相等的元素,则删除该元素,并返回true,若没有则返回false。当类集类型为List时,有可能有多个元素与o的值相等,此时,只会删除第一个值为o的元素,其他元素位置不变。
boolean removeAll(Collection<?>c):删除本类集中与指定类集c中的元素相等的所有元素,不管有多少个元素,只要在c中出现了,调用后d中就不会出现。若调用后本类集的元素有改变(即有元素被删除),则返回true,否则返回false。
boolean retainAll(Collection<?>c):保持本类集中在指定类集中出现过的所有元素,即删除本类集中不包含在指定类集c中的所有元素。若调用后本类集的元素有改变(即有元素被删除),则返回true,否则返回false。
int size():返回本类集中元素的个数,但大小不能超过0x7fffffff,若超过则返回0x7fffffff。
Object[] toArray():返回一个包含了本类集中所有元素的数组,数组类型为:Object[],因为底层是通过iterator()方法来传值的,所以数组中元素的顺序同样依赖于本类集的类型,若为List则按List的顺序放入数组,若为Set则无序。
<T>T[] toArray(T[] a):以泛型的形式来传递返回数组的类型,其他与Object[]toArray()方法类似。
直接继承Collection接口的有List<E>、Queue<E>、BeanContext和Set<E>四个接口,其中我们用的最多的是List<E>和Set<E>这两个接口,后面的博文将会详细分析;另外两个接口用的相对较少,一般要实现这两个接口的功能时都是开发者自己重新实现,在此不作详细分析。
说明:部分内容来自网络!后面将会对常用的接口和类作详细分析,希望跟各位网友共同进步,不对的地方欢迎大家指正!
测试代码如下:
public class CollectionTest
{
public static void main(String[] args)
{
Collection<String> c = new ArrayList<String>();
Collection<String> d = new ArrayList<String>();
c.add("1");
c.add("2");
c.add("1");
c.add("3");
c.add("1");
c.add("3");
c.add("3");
c.add("2");
c.add("3");
// c.remove("3");
d.add("2");
d.add("1");
d.add("4");
System.out.println(c.equals(d));
System.out.println(c);
System.out.println(d);
System.out.println(c.hashCode());
System.out.println(d.hashCode());
// System.out.println(c.removeAll(d));
System.out.println(c);
System.out.println("----------------------");
Object[] o = c.toArray();
String s = null;
for(int i = 0; i < o.length; i++)
{
s = (String)o[i];
System.out.println(s);
}
}
}