java集合基础_[Java教程]Java基础之:集合——Collection

[Java教程]Java基础之:集合——Collection

0 2020-12-25 21:00:17

Java基础之:集合——Collection

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

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

集合的分类

bc91bb04e6e9c61e24c974e4440db8f2.gif

Collection

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

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

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

Collection是一个接口,public interface Collection extends Iterable

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

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

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

Collection常用方法

在Collection接口中的方法,在List与Set中也能够使用,所以比较重要。add:添加单个元素

remove:删除指定元素

contains:查找元素是否存在

size:获取元素个数

isEmpty:判断是否为空

addAll:添加多个元素

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

removeAll:删除多个元素

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对象,则必须要有一个需要被迭代的集合。

迭代器执行原理:创建迭代器 Iterator iterator = col.iterator();

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

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

在使用迭代器遍历完一次集合后,一定要重置迭代器。否则迭代器将一直指向最后一个元素,就不能进行下一次遍历。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和ageimport 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

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值