集合框架介绍
集合 来自官方的说明
1. 集合与集合框架
A collection — sometimes called a container — is simply an object that groups multiple elements into a single unit. Collections are used to store, retrieve, manipulate, and communicate aggregate data.集合(有时称为容器)只是一个将多个元素分组为一个单元的对象。集合用于存储,检索,操作和传达聚合数据。
A collections framework is a unified architecture for representing and manipulating collections.集合框架是用于表示和操作集合的统一体系结构。
2. 为什么要使用集合框架
回想我们之前所学的数组,数组也能存储元素,也能对元素进行增删改查操作。那么数组与集合之间有什么区别呢
使用数组实现增删改查
package com . wq . collection ;import java . util . Arrays ;public class ArrayUtil {//使用数组来存储数据,因为不知道存储什么样的数据,所以使用 Object 数组//支持存储所有类型的数据private Object [] elements ;private int size ; // 数组中存储的元素个数public ArrayUtil () {this ( 16 );}public ArrayUtil ( int capacity ) {elements = new Object [ capacity ];}public int size (){return size ;}public void add ( Object o ){//数组中存储满了,数组需要扩容才能存储新的元素if ( size == elements . length ){//4 >> 1 0100 >> 1 => 010 = 2int length = elements . length + elements . length >> 1 ;elements = Arrays . copyOf ( elements , length );}elements [ size ++ ] = o ;}public void delete ( Object o ){if ( o == null ) return ;int index = - 1 ; // 要删除的元素的下标for ( int i = 0 ; i < size ; i ++ ){if ( o . equals ( elements [ i ])){index = i ;break ;}}// 1 2 3 4 5// 1 2 4 5System . arraycopy ( elements , index + 1 , elements , index , size - index - 1 );size -- ;}public void update ( int index , Object o ){if ( index < 0 || index >= size ){throw new ArrayIndexOutOfBoundsException ( " 下标越界了 " );}elements [ index ] = o ;}public Object get ( int index ){if ( index < 0 || index >= size ){throw new ArrayIndexOutOfBoundsException ( " 下标越界了 " );}return elements [ index ];}}package com . wq . collection ;public class ArrayUtilTest {public static void main ( String [] args ) {ArrayUtil util = new ArrayUtil ();util . add ( 1 );util . add ( 2 );util . add ( 3 );util . add ( 4 );util . add ( 5 );for ( int i = 0 ; i < util . size (); i ++ ){Object o = util . get ( i );System . out . println ( o );}System . out . println ( "=================" );util . update ( 1 , 10 );for ( int i = 0 ; i < util . size (); i ++ ){Object o = util . get ( i );System . out . println ( o );}System . out . println ( "=================" );util . delete ( 4 );for ( int i = 0 ; i < util . size (); i ++ ){Object o = util . get ( i );System . out . println ( o );}System . out . println ( "=================" );}}
使用数组对元素进行增删改查时,需要我们自己编码实现。而集合是Java 平台提供的,也能进行增删改查,已经有了具体的实现。我们不需要再去实现,直接使用Java 平台提供的集合即可,这无疑减少了编程的工作量。同时Java 平台提供的集合无论是在数据结构还是算法设计上都具有更优的性能。
3.集合框架接口体系
集合接口体系中有两个顶层接口 Collection 和 Map , Collection 接口属于单列集合(可以理解为一次存储一个元素), Map 接口属于双列集合(可以理解为一次存入两个相关联的元素)。
Collection 接口
1. Collection 接口常用方法
int size (); // 获取集合的大小boolean isEmpty (); // 判断集合是否存有元素boolean contains ( Object o ); // 判断集合中是否包含给定的元素Iterator < E > iterator (); // 获取集合的迭代器Object [] toArray (); // 将集合转换为数组< T > T [] toArray ( T [] a ); // 将集合转换为给定类型的数组并将该数组返回boolean add ( E e ); // 向集合中添加元素boolean remove ( Object o ); // 从集合中移除给定的元素void clear (); // 清除集合中的元素boolean containsAll ( Collection <?> c ); // 判断集合中是否包含给定的集合中的所有元素boolean addAll ( Collection <? extends E > c ); // 将给定的集合的所有元素添加到集合中
2. AbstractCollection
AbstractCollection 实现了 Collection 接口,属于单列集合的顶层抽象类。
源码解读
AbstractCollection 类并没有定义存储元素的容器,因此,其核心的方法都是空实现。这些空实现的方法都交给其子类来实现