集合框架

概述

数组容器由于无法扩展容量,也没有更多的功能可以使用,而Java中的另一种容器:集合,就能满足这些要求。

特点

  • 集合中的每一个元素都是对象,存储的实际上是对象的引用。
  • 集合长度可扩展,并且是自动的。
  • 根据数据结构的不同,集合分为很多种,每一种都有各自的特点。
  • 集合的最上层是Collection接口,集合最基本的增删改查方法均在该接口中有所体现。
  • 集合中如果没有使用泛型,则默认存储的是Object类,所有的对象均向上转型存入集合,取出使用时需要向下转型,并可能有类型转换异常。所以建议配合泛型使用集合。

集合框架UML类图


Collection集合(顶层接口)

概述

该集合是Java集合框架的顶层接口,其主要子接口为List接口和Set接口。

常用方法

  • 添加
    boolean  add(E e)
    boolean  addAll(Collection<? extends E> c)
  • 删除
    boolean  remove(Object o)
    boolean  removeAll(Collection<?> c)
    boolean  retainAll(Collection<?> c)
  • 判断是否包含
    boolean  contains(Object o)
    boolean  containsAll(Collection<?> c)
  • 清空
    void  clear()
  • 获取迭代器
    Iterator<E>  iterator()
  • 判断空和获取大小
    boolean  isEmpty()
    int  size()

示例

   
   
Collection coll1 = new ArrayList ();
Collection coll2 = new ArrayList ();
 
boolean b = true;
// 1. 添加
b = coll1.add( "Java1" ); // 类型提升
b = coll1.add( "Java2" );
b = coll1.add( "Java3" );
// coll1: [Java1, Java2, Java3]
b = coll2.add( "Java4" );
b = coll2.addAll( coll1);
// 添加coll1中所有不同的元素到coll2中,[Java4, Java1, Java2, Java3]
 
// 2. 删除
b = coll2.remove("Java2"); // coll2: [Java4, Java1, Java3]
// coll1移除所有和coll2相同的元素
b = coll1.removeAll( coll2); // coll1: [Java2]
// coll1移除所有和coll2不同的元素
b = coll1.retainAll( coll2); // coll1: null
 
// 3. 判断是否包含
b = coll1.contains( "Java2" ); // true
b = coll2.containsAll( coll1); // false
 
// 4. 清空
coll1.clear();
// 5. 自动装箱(Java 5支持),相当于coll.add(Integer.valueOf(3));
coll1.add(3) ;
coll1.add("Java");
coll1.add(3.14) ;
coll1.add(true);
// coll1: [3, Java, 3.14, true]

集合迭代

概述

  • 迭代是取出元素的一种方式,类似于数组的遍历。
  • 由于集合元素的获取具有共性,一般都需要判断,获取每一个元素,更灵活的获取元素等功能,所以向上抽取为Iterator接口。
  • 集合的迭代需要使用迭代器,由于Collection接口继承了Iterator接口,所以Java集合框架中的单列集合均具有获取该集合迭代器的方法。

方法

  • 判断集合中是否还有下一个元素
    boolean  hasNext()
  • 获取下一个元素
    E  next()
  • 移除该元素
    default void  remove()
一般使用for循环来使用迭代器,如果需要遍历集合,也可以使用增强的for循环。当然,使用while也是可以的。

示例

   
   
Collection c = new ArrayList ();
b = c.add( "Java1" );
b = c.add( "Java2" );
b = c.add( "Java3" );
for (Iterator it = c.iterator(); it.hasNext();) {
String str = (String) it.next();
System.out.print( str + " " );
}
System.out.println();
for (Object object : c) {
String str = (String) object;
System.out.print( str + " " );
}
System.out.println();
Iterator it = c .iterator();
while(it.hasNext()) {
String str = (String) it.next();
System.out.print( str + " " );
}

运行结果

Java1 Java2 Java3 
Java1 Java2 Java3 
Java1 Java2 Java3 

注意

  • 迭代器基本替代了Vector类中的Enumeration。
  • 迭代器如果没有使用泛型,那么获得的是Object类型,需要向下转型。
  • next方法是自动向下取元素,要避免出现NoSuchElementException。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐