2020-12-25

Java基础之:集合——Collection

Java基础之:集合——Collection

为什么要引入集合的概念?

因为我们在使用数组时,不方便动态的扩容缩容。而集合很好的解决了这个问题,当然这只是集合强大功能中的一部分。

集合的分类

 

 

Collection

首先,学习单列集合Collection。我们先了解什么是单列,什么是双列。

   单列:只有一列数据组成,类似一维数组。

   双列:由两列数据组成,一列表示键,一列表示值。类似二维数组。

Collection是一个接口,public interface Collection<E> extends Iterable<E>

对于Collection的实现类而言,有些是有序(List)的,有些是无序(Set)的。(这里的有序与无序指的是,输出数据时是否按照输入时的顺序)

Set与List是继承于Collection接口的两个子接口。可以通过它们来实现Collection。

List是允许有重复元素的,Set是不允许有重复元素的。

Collection常用方法

在Collection接口中的方法,在List与Set中也能够使用,所以比较重要。

  1. add:添加单个元素

  2. remove:删除指定元素

  3. contains:查找元素是否存在

  4. size:获取元素个数

  5. isEmpty:判断是否为空

  6. addAll:添加多个元素

  7. containsAll:查找多个元素是否都存在

  8. removeAll:删除多个元素

  9. clear:清空

package class_collection;import java.util.ArrayList;import java.util.Collection;public class ClassTest01_CollectionMethods {​ @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) {​  //Collection的子接口List的实现类ArrayList,使用多态的特性。  //此时col编译类型为Collection,运行类型为ArrayList,所以只能访问Collection中的方法。  Collection col = new ArrayList();    //add:添加单个元素  col.add("Hello" + "01");  col.add("Hello" + "02");  col.add("Hello" + "03");  col.add("Hello" + "04");  System.out.println(col);    //remove:删除指定元素  col.remove("Hello02");  System.out.println(col);    //contains:查找元素是否存在  col.contains("Hello01"); //true    //size:获取元素个数  col.size(); // 3​  //isEmpty:判断是否为空  col.isEmpty(); //false    //addAll:添加多个元素,参数为Collection类型,即实现了Collection接口的集合。  col.addAll(col); //此效果等同于将col复制一份加入原来的col集合中  System.out.println(col);    //containsAll:查找多个元素是否都存在,参数为Collection类型  col.containsAll(col); //true    //removeAll:删除多个元素,参数为Collection类型  col.removeAll(col); //效果等同于清空集合  System.out.println(col);​  //clear:清空   col.clear();  System.out.println(col); }}​

 

Collection遍历方式

Collection接口可以使用两种方法遍历集合,使用Iterator迭代器 或者 使用增强for循环。

Iterator迭代器遍历

Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。

Collection接口中有iterator()方法,用以返回一个Iterator接口的对象,即可以返回一个迭代器。(Collection中有此方法,那么所有实现Collection接口的类也可以使用)

Iterator仅用于遍历集合,Iterator本身并不提供承载对象的能力(它是一个接口)。如果需要创建Iterator对象,则必须要有一个需要被迭代的集合。

 

迭代器执行原理:

  1. 创建迭代器 Iterator iterator = col.iterator();

  2. 使用hasNext()方法判断是否还有下一个元素:iterator.hasNext(); //T or F

  3. 使用next()方法将指针下移并返回下移后指针指向的元素:System.out.println(iterator.next());

  4. 在使用迭代器遍历完一次集合后,一定要重置迭代器。否则迭代器将一直指向最后一个元素,就不能进行下一次遍历。

package class_collection;​import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;​public class ClassTest02_ForeachCollection {​ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) {    Collection col = new ArrayList();    col.add("Hello" + "01");  col.add("Hello" + "02");  col.add(new Book("三体1", 30.4));  col.add(new Book("三体2", 33.4));  col.add(new Book("三体3", 31.4));    /*   * Iterator 核心方法 hasNext() next()   *  通常遍历使用while   */  Iterator iterator = col.iterator();  System.out.println(iterator.getClass());//iterator运行类型java.util.ArrayList$Itr    while(iterator.hasNext()) { //首先判断是否还有下一个元素   System.out.println(iterator.next());    //直接输出元素内容,如果是自定义类,需要重新toString  }  //在使用迭代器遍历完一次集合后,一定要重置迭代器。否则迭代器将一直指向最后一个元素,就不能进行下一次遍历  iterator = col.iterator(); }}​class Book{ private String name; private double price; public Book(String name, double price) {  super();  this.name = name;  this.price = price; }  @Override public String toString() {  return "Book [name=" + name + ", price=" + price + "]"; }}

 

增强for循环遍历

jdk5.0出现了增强for循环,可以代替iterator迭代器,特点:增强for就是简化版的iterator,本质一样。只能用于遍历集合或数组。

基本语法:

  for(元素类型 元素名 : 集合名或数组名) {

    访问元素

  }

package class_collection;​import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;​public class ClassTest02_ForeachCollection {​ @SuppressWarnings({ "rawtypes", "unchecked" }) public static void main(String[] args) {    Collection col = new ArrayList();    col.add("Hello" + "01");  col.add("Hello" + "02");  col.add(new Book("三体1", 30.4));  col.add(new Book("三体2", 33.4));  col.add(new Book("三体3", 31.4));    /*   增强for循环本质上,还是使用Iterator迭代器。   只不过是提供的一种更加方便的形式。  */  //Debug看源码  for(Object obj : col) {   System.out.println(obj);  } }​class Book{ private String name; private double price; public Book(String name, double price) {  super();  this.name = name;  this.price = price; }  @Override public String toString() {  return "Book [name=" + name + ", price=" + price + "]"; }}

 

Collection练习

创建 3个 Dog {name, age} 对象,放入到 ArrayList 中,赋给 List 引用

用迭代器和增强for循环两种方式来遍历

重写Dog 的toString方法, 输出name和age

import java.util.List;import java.util.ArrayList;import java.util.Iterator;​public class ClassWork01 {​ @SuppressWarnings({ "unused", "rawtypes", "unchecked" }) public static void main(String[] args) {  List list = new ArrayList();  list.add(new Dog("小白",3));  list.add(new Dog("小花",8));  list.add(new Dog("小黑",6));    //迭代器  Iterator ite = list.iterator();  while(ite.hasNext()) {   System.out.println(ite.next()); //next()取出集合中的下一个对象,默认调用toString  }//  ite = list.iterator(); //使用迭代器,在遍历完之后,一定要重置。因为索引已经走到了最后。  //未重置迭代器,此循环无输出  while(ite.hasNext()) {   System.out.println(ite.next());  }​  System.out.println("=======================");    //增强for循环  for(Object obj:list) {   System.out.println(obj); //编译类型为Object,动态绑定到Dog  } }}​class Dog{ private String name; private int age; public Dog(String name, int age) {  super();  this.name = name;  this.age = age; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; }  @Override public String toString() {  return "Dog [name=" + name + ", age=" + age + "]"; } } 

程序输出

Dog [name=小白, age=3]

Dog [name=小花, age=8]

Dog [name=小黑, age=6]

==========================

Dog [name=小白, age=3]

Dog [name=小花, age=8]

Dog [name=小黑, age=6]









原文转载:http://www.shaoqun.com/a/504039.html

跨境电商:https://www.ikjzd.com/

hunter:https://www.ikjzd.com/w/992

review:https://www.ikjzd.com/w/2735


Java基础之:集合——Collection为什么要引入集合的概念?因为我们在使用数组时,不方便动态的扩容缩容。而集合很好的解决了这个问题,当然这只是集合强大功能中的一部分。集合的分类Collection首先,学习单列集合Collection。我们先了解什么是单列,什么是双列。   单列:只有一列数据组成,类似一维数组。   双列:由两列数据组成,一列表示键,一列表示值。类似二维数组。Collec
trax:trax
斑马物流:斑马物流
广州番禺海傍水乡怎去?:广州番禺海傍水乡怎去?
河源黄龙岩开车怎么走?广东河源黄龙岩开车有多远?:河源黄龙岩开车怎么走?广东河源黄龙岩开车有多远?
新马泰旅游的经验总结:新马泰旅游的经验总结

No comments:

Post a Comment