[学习笔记]Java集合框架以及Collection顶层接口
集合框架概述数组容器由于无法扩展容量,也没有更多的功能可以使用,而Java中的另一种容器:集合,就能满足这些要求。特点集合中的每一个元素都是对象,存储的实际上是对象的引用。集合长度可扩展,并且是自动的。根据数据结构的不同,集合分为很多种,每一种都有各自的特点。集合的最上层是Collection接口,集合最基本的增删改查方法均在该接口中有所体现。集合中
·
集合框架
概述
数组容器由于无法扩展容量,也没有更多的功能可以使用,而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。
更多推荐
已为社区贡献1条内容
所有评论(0)