公司动态
集合初识和用法——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是接口不能创建对象只能创建其子类的对象然后定义引用指向子类的对象 CollectionInteger collnew ArrayListInteger(); //ArrayList是collection接口的子类所以可以创建一个该类的对象父类引用指向它 for(int i1;i10;i){ coll.add(i); //add方法添加单个元素 } System.out.println(coll.toString()); // 打印结果 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]按顺序输出 //再创建一个集合 CollectionInteger coll2new ArrayListInteger(); for(int i11;i20;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 IteratorInteger iteratorcoll.iterator(); /* 迭代器是集合中内置的一个对象该对象主要用来访问集合当前状态下的元素 * hasNext() 是否有下一个 * next() 取下一个 * 这两个方法是IteratorE中的方法collection中并没有 * */ while(iterator.hasNext()){ //从头之前开始遍历如果该集合的下一个元素存在 System.out.println(iterator.next()); //则取下一个并打印 } coll.clear(); //清除该集合对象中所有的元素 System.out.println(coll); //结果 [] } }