Java集合-Collection

简介: Java集合-Collection

40b246343339ac8c8b317e5649bc05ff.jpgCollection接口 (java.util.Collection) 是java集合根接口中的一个,尽管不直接实例化Collection,但是我们经常用到其子类,而且通常把其子类当做Collection使用,本文我们会讲到。


创建Collection

正如上面所说,我们不直接实例化Collection,而是实例化其子类,下面是创建Collection子类List的代码:


Collection collection = new ArrayList();

上面的示例适用于Collection的每个子类型。


Collection子类

Collection的子类接口:

  • List
  • Set
  • SortedSet
  • NavigableSet
  • Queue
  • Deque

Java没有提供Collection接口的可用实现,因此必须使用列出的子类型之一。Collection接口仅仅定义了一组所有子类都共享的方法,你可以忽略它的特定类型,把它当作一个Collection来处理。这是标准的继承,所以没有什么神奇之处,但是它仍然可以是一个很好的特性,下文会讲述这些共同的操作。

下面的代码是使用Collection的一个方法:

public class MyCollectionUtil{
  public static void doSomething(Collection collection) {
    Iterator iterator = collection.iterator();
    while(iterator.hasNext()){
      Object object = iterator.next();
      //do something to object here...
    }
  }
}

下面是几种不同的Collection子类调用上面的方法:

Set  set = new HashSet();
List list = new ArrayList();
MyCollectionUtil.doSomething(set);
MyCollectionUtil.doSomething(list);


Collection增加元素

无论使用Collection的哪个子类,都有标准的增加元素的方法,通过Collection的add()方法增加元素,下面是代码:

String     anElement  = "an element";
Collection collection = new HashSet();
boolean didCollectionChange = collection.add(anElement);

add()方法增加指定的元素,如果Collection因调用add()方法而更改,则返回true。如果Set中已经包含了此元素,那么就不再增加,另一方面,如果是List,则List中会存在两个同样的元素。


Collection移除元素

remove()方法用于移除指定的元素,如果元素在Collection则会返回true,如果不存在则会返回false,下面是代码:

boolean wasElementRemoved = collection.remove("an element");


Collection增加另外一个Collection

同样可以用Collection的addAll()方法增加另外一个Collection,下面是代码:

Set  aSet  = ... // get Set  with elements from somewhere
Collection collection = new HashSet();
collection.addAll(aSet);    //returns boolean too, but ignored here

Collection 的ddAll()方法增加参数Collection中的所有元素,但是增加的不是Collection本身仅仅是其元元素,如果使用Collection作为参数调用add(),则集合对象本身将被添加,而不是其元素。addAll()方法的具体行为取决于Collection子类型。某些Collection子类型允许将同一元素多次添加,而其他子类型则不允许。

Collection移除Collection
Collection的removeAll()移除给定参数Collection中的所有元素,如果参数Collection中的元素在本身Collection中不存在,则仅仅是忽略,下面是代码:
Collection objects = //... get a collection of objects from somewhere.
collection.removeAll(objects);


保留给定的Collection中的元素

Collection 的retainAll()方法刚好和 removeAll()方法相反,不是移除所有给定参数中的Collection元素,而是保留这些元素,移除其他的元素,需要注意的是仅仅保留原Collection中存在的元素。任何在参数中存在而原Collection中不存在的元素,会被忽略,不会被增加,下面代码:

Collection colA = new ArrayList();
Collection colB = new ArrayList();
colA.add("A");
colA.add("B");
colA.add("C");
colB.add("1");
colB.add("2");
colB.add("3");
Collection target = new HashSet();
target.addAll(colA);     //target now contains [A,B,C]
target.addAll(colB);     //target now contains [A,B,C,1,2,3]
target.retainAll(colB);  //target now contains [1,2,3]


检查Collection是否包含确定的元素

Collection有两个方法可以检查是否包含某个或者某些确定的元素, contains()和 containsAll()方法,下面是代码:

Collection collection = new HashSet();
boolean containsElement = collection.contains("an element");
Collection elements = new HashSet();
boolean containsAll = collection.containsAll(elements);

如果Collection中包含某个元素contains() 方法会返回true,否则会返回false。

如果Collection中包含给定Collection的所有元素,那么containsAll()返回true,否则返回false。


Collection大小

可以调用Collection的size()方法,返回Collection中的元素个数,下面代码:

int numberOfElements = collection.size();


迭代Collection

可以通过Iterator迭代Collection中的所有元素,下面是代码:

Collection collection = new HashSet();
//... add elements to the collection
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
    Object object = iterator.next();
    System.out.println(object);
}

同样可以通过for-each循环迭代Collection:

Collection collection = new HashSet();
collection.add("A");
collection.add("B");
collection.add("C");
for(Object object : collection) {
    System.out.println(object);
}


目录
相关文章
|
14天前
|
监控 算法 Java
Java中的内存管理:理解Garbage Collection机制
本文将深入探讨Java编程语言中的内存管理,特别是垃圾回收(Garbage Collection, GC)机制。我们将从基础概念开始,逐步解析垃圾回收的工作原理、不同类型的垃圾回收器以及它们在实际项目中的应用。通过实际案例,读者将能更好地理解Java应用的性能调优技巧及最佳实践。
55 0
|
2月前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
2月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
2月前
|
Java
【Java集合类面试二十八】、说一说TreeSet和HashSet的区别
HashSet基于哈希表实现,无序且可以有一个null元素;TreeSet基于红黑树实现,支持排序,不允许null元素。
|
2月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
2月前
|
Java
【Java集合类面试二十六】、介绍一下ArrayList的数据结构?
ArrayList是基于可动态扩展的数组实现的,支持快速随机访问,但在插入和删除操作时可能需要数组复制而性能较差。
|
2月前
|
存储 Java 索引
【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?
ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入和删除操作更高效,但占用更多内存。
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
8天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
11天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
下一篇
无影云桌面