集合初识和用法——collection(Java)

Collection接口继承了Iterable接口,能够被foreach使用,是可迭代的。下面介绍它已实现的子接口:

在API中它的已知子类和实现的类有很多,目前在这里只介绍几个它常用的子接口和collection的用法。

List接口

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素(提供角标),并搜索列表中的元素。列表允许重复的元素、列表是一维数据允许null

提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。       

Set接口

一个不包含重复元素的 collection、无序、没有角标、某些 set 实现对其所包含的元素有所限制。例如,某些实现禁止 null 元素,而某些则对其元素的类型所有限制。

Queue接口

在处理元素前用于保存元素的 collection。除了基本的 collection 操作外,队列还提供其他的插入、提取和检查操作每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或 false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的;在大多数实现中,插入操作不会失败

队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的 都是调用 remove() poll()所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个 Queue 实现必须指定其顺序属性。

Queue 实现通常不允许插入 null 元素,尽管某些实现(如LinkedList)并不禁止插入 null。即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。

Deque接口

一个线性 collection,支持在两端插入和移除元素。名称 deque 是“double ended queue(双端队列)”的缩写,大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量限制的双端队列也支持没有固定大小限制的双端队列。

此接口扩展了Quene接口。在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。从 Queue 接口继承的方法完全等效于 Deque 方法。

虽然 Deque 实现没有严格要求禁止插入 null 元素,但建议最好这样做。建议任何事实上允许 null 元素的 Deque 实现用户最好 要利用插入 null 的功能。这是因为各种方法会将 null 用作特殊的返回值来指示双端队列为空。

collection的方法

collection方法的测试和使用示例

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class Main {
	public static void main(String[] args) {
    //<E>泛型,表示该集合存储的是什么类型的元素
    //collection是接口,不能创建对象,只能创建其子类的对象,然后定义引用指向子类的对象
		Collection<Integer> coll=new ArrayList<Integer>();
   //ArrayList是collection接口的子类,所以可以创建一个该类的对象,父类引用指向它
		for(int i=1;i<=10;i++){
			coll.add(i); //add方法,添加单个元素
		}
		System.out.println(coll.toString()); 
      // 打印结果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],按顺序输出

            //再创建一个集合
		Collection<Integer> coll2=new ArrayList<Integer>(); 
		for(int i=11;i<=20;i++){
			coll2.add(i);
		}
		System.out.println(coll2.toString());
      //打印coll2的结果 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
		coll.addAll(coll2); //addAll方法,将coll2中的集合全部添加到coll集合中
		System.out.println(coll);
     //打印结果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

              //contains方法判断该集合中是否包含某个元素
		System.out.println(coll.contains(100));    
               //结果 false
                System.out.println(coll.contains(10));
               //结果 true
       
             //remove方法移出某集合中的某个元素,返回的类型是Boolean类型
		System.out.println(coll2.remove(11));
             //结果 true
		System.out.println(coll2.remove(100));
             // 结果 false

             //测试添加的位置,在末尾添加,不具有自动排序的功能
		coll2.add(66);
                coll2.add(66);
		System.out.println(coll2);
             //结果 [12, 13, 14, 15, 16, 17, 18, 19, 20, 66, 1]

             //containsAll方法,判断该集合是否包含另一个集合,返回类型是Boolean类型
		System.out.println(coll.containsAll(coll2));
             //结果 false
          
             //equals方法比较两个对象的地址是否相同,返回类型是Boolean类型
		System.out.println(coll.equals(coll2));
             //结果 false

             //isEmpty方法是判空操作,判断该集合是否是一个空集合,返回类型仍是Boolean类型
		System.out.println(coll.isEmpty());
             //结果 false
 
//size方法获得的是集合的长度,返回类型为int类型。就如:获取数组的长度调用的是length属性,获取字符串的长度调用的是length方法
		System.out.println(coll.size());
           //结果 20

              //retainAll保留两个集合共有的元素,也就是求交集
		coll.retainAll(coll2);
		System.out.println(coll);
              //结果 [1, 12, 13, 14, 15, 16, 17, 18, 19, 20]

		
            //遍历集合的方法之一 foreach
		for(Integer number:coll){
			System.out.println(number);
		}
		System.out.println("==============");

           //遍历集合的方法之二 迭代器Iterator
		Iterator<Integer> iterator=coll.iterator();
		/* 迭代器是集合中内置的一个对象,该对象主要用来访问集合当前状态下的元素
		 *  hasNext()   是否有下一个
		 *  next()      取下一个
                 *  这两个方法是Iterator<E>中的方法,collection中并没有
		 * */
		while(iterator.hasNext()){  //从头之前开始遍历,如果该集合的下一个元素存在
			System.out.println(iterator.next()); //则取下一个并打印
		}
		coll.clear(); //清除该集合对象中所有的元素
		System.out.println(coll);
              //结果 []
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章