一、概述
java容器是javaAPI所提供的一系列类的实例,用于在程序中存放对象,严格来说是存放对象的引用。容器都是对于object类来处理,由于object类是所有类的基类,所以容器可以存放所有的java类。
Collection接口定义了存取对象的方法,有两个子接口——Set、List。
Set是无顺序并且不可重复的。List是有顺序可以重复的。
Map接口提供了KEY-VALUE键值对存储机智。
二、List
实现了该接口的类有LinkedList和ArrayList。
LinkedList底层的数据结构是链式存储,读取数据较慢,需要一个个的next;但是修改效率高,删除或者添加只需要更改指针。
ArrayList是顺序存储的数组形式,读取数据较快,直接用第一个和偏移量即可找到所要的位置;修改效率低,删除一个值,则后面都往前移动一个位置,添加一个值,则后面的都往后移动一个位置。ArrayList的创建,长度是固定的,若是长度不够了,则新建一个大的数组再把旧的数据复制进去,效率很低。
java.util.Collections类提供了一些基于List的算法:
三、Set
Set接口是Collection的子接口,Set接口没有提供额外的方法。实现Set接口的容器类中的元素是无序且不可重复的。(集合)
JDK所提供的Set容器类有HashSet,TreeSet等。
四、Iterator、Comparable
所有实现了Collection接口的类都有一个iterator()返回一个实现了Iterator接口的对象。
这个对象叫做迭代器,用于遍历容器内的元素。有三个方法:
举例:
Import java.util.*; public class Test{ public static void main(String[] args){ Collection c=new HashSet();//父类引用指向子类对象 c.add(new Name("f1","l1")); c.add(new Name("f2","l2")); Iterator i = c.iterator(); while(i.hasNext()){ Name n = (Name)i.next();//next()返回值是object System.out.print(n.getFirstName()+" "); } } }遍历之后也可以进行排序,这时就可以用到Comparable接口了。
该接口只有一个方法:public int compareTo(object obj); 返回0则表示this==obj;返回正数则表示this>obj;返回负数则表示this<obj;
举例:
<span style="font-family:Arial;">class Name implements Comparable { private String firstName; private String lastName; public Name(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public int compareTo(Object o) { Name n = (Name)o; int lastCmp = lastName.compareTo(n.lastName); return (lastCmp != 0 ? lastCmp : //先比较姓氏 firstName.compareTo(n.firstName)); </span><span style="font-family: Arial;"> }</span><span style="font-family: Arial;"> }</span>