Java集合-Collection

简介:

Collection接口是 (java.util.Collection)是Java集合类的顶级接口之一。所以不能直接实例化一个Collection,但是可以实例化它的一个子类,你或许经常把这些子类作为一个Collection统一探讨。在这篇文章中,你将看到如何处理。

下面是本文的一个主题列表:

  1. Collection子类
  2. 增加和移除元素
  3. 检测一个Collection是否包含一个确定的元素
  4. Collection大小
  5. 遍历一个Collection

Collection子类
下面的接口继承了Collection接口:

  1. List
  2. Set
  3. SortedSet
  4. NavigableSet
  5. Queue
  6. Deque

Java没有一个可用的Collection接口的实现,所以你必须使用上述列表中的子类。Collection接口仅仅只是定义了每个子类共享的一系列方法。这使得忽略你具体使用的Collection类型而把他们当作一个Collection统一对待成为可能。这是一个标准的继承,没有什么神奇之处,但是有时候会成为一个很好的特性。本文的后面部分将描述这些常用操作的大部分使用方法。

下面是一个Collection操作的一个方法:

01 public class MyCollectionUtil{
02  
03   public static void doSomething(Collection collection) {
04  
05     Iterator iterator = collection.iterator();
06     while(iterator.hasNext()){
07       Object object = iterator.next();
08  
09       //do something to object here...
10     }
11   }
12 }

下面是调用不用类型的Collection子类的方法的一些方式:

1 Set  set  = new HashSet();
2 List list = new ArrayList();
3  
4 MyCollectionUtil.doSomething(set);
5 MyCollectionUtil.doSomething(list);

增加和移除元素

不管你使用的是哪种类型的Collection子类,有一些标准的方法从一个Collection中增加和移除元素。增加和移除单个的元素就像下面这样:

1 String     anElement  = "an element";
2 Collection collection = new HashSet();
3  
4 boolean didCollectionChange = collection.add(anElement);
5 boolean wasElementRemoved   = collection.remove(anElement);

add()方法向Collection中增加元素,如果Collection结构改变了,作为add()方法的结果,将返回true。如果一个Set的实例中已经存在了这个元素,那么不会重复增加,这个Set实例的结构也不会发生变化。另一方面,如果在一个List上调用这个方法,而这个List已经存在了这个元素,那么这个List将有两个这个元素。

remove()方法移除一个元素。如果Collection中存在这个元素并且被移除了,这个方法将返回true。如果元素不存在,将返回false。

你也可以增加和移除Collection对象,下面是一些示例:

01 Set  aSet  = ... // get Set  with elements from somewhere
02 List aList = ... // get List with elements from somewhere
03  
04 Collection collection = new HashSet();
05  
06 collection.addAll(aSet);    //returns boolean too, but ignored here.
07 collection.addAll(aList);   //returns boolean too, but ignored here.
08  
09 collection.removeAll(aList);   //returns boolean too...
10 collection.retainAll(aSet);    //returns boolean too...

addAll()方法增加通过参数传递过来的Collection中的所有元素。这个Collection对象本身不会被添加,仅仅只是添加它的元素。但是如果你调用add()方法传递这个参数,这个Collection对象本身将被添加,而不是它的元素。

正是由于addAll()方法依赖于Collection的子类。有一些子类允许一样的元素被多次添加,而另外一些则不允许。

removeAll()方法移除通过参数传递过来的Collection中的所有元素。如果传递过来的Collection中某些元素在目标Collection中不存在,这些元素将会忽略。

retainAll()方法正好和removeAll()方法相反。不是移除所有给定参数Collection中元素,而是保留保留这些元素,移除其他的。记住,只有目标Collection中已经存在了这些元素,这些元素才可以保留。在参数Collection中存在而目标Collection中不存在的元素,将不会被新增到目标Collection。它们将被忽略:

来看看一些使用伪代码的例子:

01 Collection colA = [A,B,C]
02 Collection colB = [1,2,3]
03  
04 Collection target = [];
05  
06 target.addAll(colA);     //target now contains [A,B,C]
07 target.addAll(colB);     //target now contains [A,B,C,1,2,3]
08  
09 target.retainAll(colB);  //target now contains [1,2,3]
10  
11 target.removeAll(colA);  //nothing happens - already removed
12 target.removeAll(colB);  //target is now empty.

检测一个Collection是否包含一个确定的元素

Collection接口有两个方法来检查一个Collection是否包含一个或多个元素。这就是contains()containsAll()方法。它们在下面被说明:

1 Collection collection   = new HashSet();
2 boolean containsElement = collection.contains("an element");
3  
4 Collection elements     = new HashSet();
5 boolean containsAll     = collection.containsAll(elements);

如果这个Collection含有这个元素,contains()方法将返回true,反之,则亦然。
如果这个Collection包含给定Collection参数中的所有元素,containsAll()方法将返回true,反之,则亦然。

Collection大小

你可以通过调用size()方法来检测一个Collection的大小,”Size“表示Collection中的元素个数,下面是一个示例:

1 int numberOfElements = collection.size();

迭代一个Collection

你可以迭代collection中的所有元素,collection中包含的Iterator将完成这件事情,就像下面这样:

1 Collection collection = new HashSet();
2 //... add elements to the collection
3  
4 Iterator iterator = collection.iterator();
5 while(iterator.hasNext()){
6     Object object = iterator.next();
7     //do something to object;
8 }

你也可以使用新的for循环:

1 Collection collection = new HashSet();
2 //... add elements to the collection
3  
4 for(Object object : collection) {
5   //do something to object;
6 }

相关文章
|
16天前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
176 100
|
16天前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
188 101
|
29天前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
4月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
222 3
|
3月前
|
Oracle Java 关系型数据库
掌握Java Stream API:高效集合处理的利器
掌握Java Stream API:高效集合处理的利器
346 80
|
3月前
|
安全 Java API
Java 8 Stream API:高效集合处理的利器
Java 8 Stream API:高效集合处理的利器
235 83
|
21天前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
2月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
164 23
|
2月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
2月前
|
安全 Java 开发者
Java集合框架:详解Deque接口的栈操作方法全集
理解和掌握这些方法对于实现像浏览器后退功能这样的栈操作来说至关重要,它们能够帮助开发者编写既高效又稳定的应用程序。此外,在多线程环境中想保证线程安全,可以考虑使用ConcurrentLinkedDeque,它是Deque的线程安全版本,尽管它并未直接实现栈操作的方法,但是Deque的接口方法可以相对应地使用。
129 12