Collection 接口及其常用方法

Dear 丶 2024-03-16 19:48 174阅读 0赞

Collection 接口的特点

Collection接口没有直接实现类,提供了更具体的子接口(如SetList)的实现。Collection实现类(通常通过其中一个子接口间接实现Collection)可以存放多个 Object 类型的元素。有些Collection接口的实现类可以存放重复的元素(List),有些则不可以(Set)。有些Collection接口的实现类是有序的(List),有些是无序的(Set)。

所有通用的Collection实现类都会提供两个”标准”构造方法:一个无参构造方法,来创建一个空的集合;以及一个带有单个Collection类型参数的构造方法,创建一个与参数集合具有相同元素的新集合。实际上,后一种构造方法可以复制任何集合,生成一个与参数集合元素相同的所需类型的集合。

  1. public class CollectionConstructors() {
  2. public static void main(String[] args) {
  3. ArrayList list = new ArrayList();
  4. System.out.println("list = " + list); // list = []
  5. list.add(1);
  6. list.add(2);
  7. list.add(3);
  8. System.out.println("list = " + list); // list = [1, 2, 3]
  9. Vector<Object> vector = new Vector<>(list);
  10. System.out.println("vector = " + vector); // vector = [1, 2, 3]
  11. }
  12. }

Collection 接口常用方法

下面的代码以其间接实现类ArrayList演示Collection接口的常用方法。

  1. public class CollectionMethod() {
  2. public static void main(String[] args) {
  3. Collection collection = new ArrayList<>();
  4. // boolean add(E e)
  5. // 给集合中添加指定的元素,添加成功则返回 true。如果此集合不允许重复元素并且已经包含了指定的元素,
  6. // 则返回 false。支持此操作的实现类可能会对添加到该集合中的元素进行限制。如果一个集合拒绝添加某个
  7. // 特定元素的原因不是因为集合已经包含该元素,会抛出一个异常(而不是返回 false)。
  8. collection.add("hello");
  9. collection.add(10);
  10. collection.add(true);
  11. System.out.println("collection = " + collection); // collection = [hello, 10, true]
  12. // boolean remove(Object o)
  13. // 从集合中移除指定元素的一个实例。如果集合包含多个满足 (o==null ? e==null : o.equals(e))条件的元素 e,
  14. // 则移除第一个元素 e。移除完成后返回 true。
  15. collection.remove("hello");
  16. System.out.println("collection = " + collection); // collection = [10, true]
  17. // boolean contains(Object o)
  18. // 如果此集合包含指定元素,则返回 true。更准确地说,当且仅当此集合包含至少
  19. // 一个满足(o==null ? e==null : o.equals(e))条件的元素 e 时,返回 true。
  20. System.out.println(collection.contains(10));// true
  21. // int size()
  22. // 返回此集合中的元素数量
  23. System.out.println(collection.size());// 2
  24. // boolean isEmpty()
  25. // 判断集合是否为空
  26. System.out.println(collection.isEmpty());// false
  27. // void clear()
  28. // 清空集合中的元素
  29. collection.clear();
  30. System.out.println("collection = " + collection); // collection = []
  31. // boolean addAll(Collection<? extends E> c)
  32. // 将指定集合中的所有元素添加到此集合中
  33. Collection collection1 = new ArrayList();
  34. collection1.add("Mary");
  35. collection1.add("Luck");
  36. collection.addAll(collection1);
  37. System.out.println("collection = " + collection); // collection = [Mary, Luck]
  38. // boolean containsAll(Collection<?> c)
  39. // 判断此集合是否包含指定集合中的所有元素
  40. System.out.println(collection.containsAll(collection1));// true
  41. // boolean removeAll(Collection<?> c)
  42. // 从此集合中移除与指定集合中相同的所有元素。在此调用返回后,此集合将不包含与指定集合共有的任何元素。
  43. collection.add("King");
  44. collection.removeAll(collection1);
  45. System.out.println("collection = " + collection); // collection = [King]
  46. }
  47. }

Collection 接口遍历元素方式

使用 Iterator(迭代器)

Iterator接口是集合的迭代器,主要用于遍历Collection集合中的元素。所有实现了Collection接口的实现类,都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器。

Iterator接口的方法:

  1. // 判断是否还有下一个元素
  2. boolean hasNext()
  3. // 返回集合中的下一个元素
  4. E next()
  5. // 从底层集合中移除此迭代器返回的最后一个元素。每次调用 next() 只能调用此方法一次。
  6. // 如果在调用此方法之前尚未调用过 next() 方法,或者在最后一次调用 next() 方法之后
  7. // 已经调用了过一次 remove() 方法,则抛出 IllegalStateException 异常。
  8. default void remove()
  9. // 对剩余的每个元素执行给定的操作,直到所有元素被处理完或操作抛出异常为止。
  10. default void forEachRemaining(Consumer<? super E> action)

迭代器的使用示例代码:

  1. public class CollectionIterateor() {
  2. public static void main(String[] args) {
  3. Collection col = new ArrayList();
  4. col.add("红楼梦");
  5. col.add("西游记");
  6. col.add("三国演义");
  7. col.add("水浒传");
  8. // 遍历 col 集合
  9. // 先获得 col 对应的迭代器
  10. Iterator iterator = col.iterator();
  11. // 使用 while 循环遍历
  12. while (iterator.hasNext()) {// 判断是否还有元素
  13. Object obj = iterator.next(); // 返回下一个元素,类型是 Object
  14. System.out.println("obj = " + obj);
  15. }
  16. // 当退出 while 循环后,iterator 迭代器指向最后一个元素
  17. // 此时再调用 next() 会抛出 NoSuchElementException 异常
  18. // iterator.next();
  19. // 如果需要再次遍历,需要重制迭代器。
  20. System.out.println("===第二次遍历===");
  21. iterator = col.iterator();
  22. while (iterator.hasNext()) {
  23. Object obj = iterator.next();
  24. System.out.println("obj = " + obj);
  25. }
  26. }
  27. }

当迭代器中不存在下一个元素时,直接调用 iterator.next() 方法会抛出 NoSuchElementException 异常,所以调用 iterator.next() 方法之前需要调用 iterator.hasNext() 方法。

增强 for 循环

增强 for 循环是简化版的 iterator,本质一样,只能用来遍历集合或数组。基本语法如下:

  1. for(元素类型 元素名 : 集合名或数组名){
  2. 访问元素;
  3. }
  4. public class EnhancedFor() {
  5. public static void main(String[] args) {
  6. Collection collection = new ArrayList();
  7. collection.add("mary");
  8. collection.add(true);
  9. collection.add(10);
  10. for (Object o : collection) {
  11. System.out.println("o = " + o);
  12. }
  13. }
  14. }

发表评论

表情:
评论列表 (有 0 条评论,174人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Set 接口及其方法

    `Set`接口是`Collection`接口的一个子接口,其主要特点如下: 1. 不允许重复元素:`Set`接口的实现类不会包含重复的元素。更正式地说,不包含任何一对使得`

    相关 Java集合-Collection方法

    集合的学习,需要知道怎么使用集合,往里面存储数据,会遍历集合,把数据取出来,最后需要掌握各种集合的特点。集合和数组有什么区别呢?两者都可以存储数据,其中数组中可以存储基本数据类