Javase之集合体系之(1)集合顶层类Collection与其迭代器知识
集合体系之集合顶层类Collection与其迭代器知识
集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存储多个对象,就不能是一个基本变量,而应该是一个容器类型的变量,在容器以前的内容中,只有数组和StringBuffer是容器类型。但StringBuffer的结果是一个字符串。故只能使用数组,即对象数组。但对象数组因为长度固定,不能适应变化的需求。所以Java提供集合类。
集合与数组的区别
1.集合的长度可变,而数组长度固定。
2.数组存储了一类元素,集合可以存储不同类型的元素。
3.数组即可存储基本类型数据,又可存储引用类型数据。但集合只能存储引用类型。
Colection(接口)
集合的顶层接口,其子体系有重复的,有唯一的,有无序的,有有序的。
主要子接口有两个:
|–List
有序(存储与取出顺序不一致),可重复。
|–Set
无序(存储顺序与取出顺序不一致,但它有内在的存储顺序该顺序通过哈希表生成,有时在输入时可能与其内在顺序相同,但之并不代表其有序,多输入几个数据就会发现其无序性),唯一。
Collection的功能概述
添加功能
boolean add(E e):添加一个元素
boolean addAll(Collection<? extends E> c):添加一个集合的元素
删除功能
void clear():移除所有元素
boolean remove(Object o):collection 中移除指定元素的单个实例
boolean removeAll(Collection<?> c):移除一个集合的对象(只要有一个被移除就返回true)
判断功能
boolean contains(Object o):判断集合是否包含指定元素
boolean containsAll(Collection<?> c);判断集合是否包含指定的集合元素(包含所有才叫包含)
boolean isEmpty():判断集合是否为空
获取功能
Iterator<E> iterator():生成一个迭代器对象,从而迭代访问每个元素
长度功能
int size():元素个数
交集功能
boolean retainAll(Collection<?> c):删除集合中,在c集合中不存在的元素
解释:假定有A,B两个集合
A,B做交集,最终结果存放在A中,B不变
返回值表示A是否发生变化。
把集合转换为数组
- toArray
Object[] toArray()
Iterator(接口)
对 collection 进行迭代的迭代器。
是遍历集合的一种方式,迭代器依赖于集合存在
迭代器定义为接口的原因:
假定迭代器是一个类,那么我们就可以创建该类对象并调用方法来实现集合的遍历,但是Java中有许多的集合类,而这些集合类的数据结构不同,所以存储和遍历的方式是不同的。进而它们的遍历方式不同,所以没有定义迭代器类。
而无论是哪种集合,都具备获取元素的操作,而且最好在辅助于判断功能,这样在获取前,先判断就不容易出错,所以判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的遍历方式不同。所以就把两种功能提取出来,而不提供具体实现,这就是迭代器声明为接口的原因。
迭代器真正的实现类在具体的子类中,以内部类的方式实现。
因为Collection类实现了Iterable而Iterable中
hasNext
boolean hasNext():如果仍有元素可以迭代,则返回 true。
(换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。
next
E next():返回迭代的下一个元素。
remove
void remove():从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器
所指向的 collection,则迭代器的行为是不确定的。
抛出:
UnsupportedOperationException - 如果迭代器不支持 remove 操作。
IllegalStateException - 如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经
调用了 remove 方法。
迭代器使用的两种方式
while
通过迭代器的hasNext()和next()方法实现
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class t3 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
Iterator<String> it = c.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
out:
hello
world
java
增强for循环
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class t3 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("hello");
c.add("world");
c.add("java");
for (String s:c){
System.out.println(s);
}
}
}
out:
hello
world
java
二者作用相同
Javase之集合体系之(1)集合顶层类Collection与其迭代器知识的更多相关文章
- Javase之集合体系(4)之Map集合
集合体系之Map集合 ##Map<K,V>( 接口 ) 特点:将键映射到值对象,一个映射不能包含重复的键:每个键只能映射一个值 Map集合与Collection集合的区别 Map集合存 ...
- 浅谈Java的集合体系
集合体系框架图 集合接口 Java集合类库将接口(interface)与实现(implementation)分离,如上图,Set是一个集合接口,而HashSet与TreeSet都是实现了Set接口的子 ...
- Java.数据结构.集合体系详解
I. 第一部分:常见数据结构 首先简单说下数据结构. 什么是数据结构?数据结构就是组织数据的方式. 常见的数据结构:栈,堆,树,图,数组,队列,链表. 这里主要介绍与java集合体系相关的栈.数组和链 ...
- Java 集合深入理解(3):Collection
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情有点粉,来学学 Collection 吧! 什么是集合? 集合,或者叫容器,是一个包含多个元素的对象: 集合可以对 ...
- Javase之集合体系(3)之Set及其子类知识
集合体系之Set及其子类知识 Set(接口) public interface Set<E>extends Collection<E> 特点:无序(存储顺序与取出顺序不一致 ...
- Javase之集合体系(2)之List及其子类ArrayList,LinkedList与Vector及其迭代器知识
集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ArrayList: ...
- javaSE中级篇3——集合体系(另外一种存储容器)——更新完毕
集合还是一种工具,所以它们的包都在java.util包下 1.集合的整个体系结构(是需要掌握的体系,完全体系不是这样) 对图中所说的 序和重复 这两词的说明: 序:指的是添加进去的元素和取出来的元素 ...
- 30.3 Collections 集合体系的工具类
/* * Collections: * 面试题:Collection和Collections有什么区别? * Collection是集合体系的最顶层,包含了集合体系的共性 * Collections是 ...
- JAVA提高九:集合体系
在经过了前面的JDK6.0新特性的学习后,将进一步深入学习JDK,因为集合的重要性,因此从集合开始入手分析: 一.集合概况 Java是一种面向对象语言,如果我们要针对多个对象进行操作,那么首先必要将多 ...
随机推荐
- jupyter notebook改变行间图片大小
jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...
- 国产处理器的逆袭机会——RISC-V
前言 今天天气阴沉,刚才又下起了小雨,温度骤降,前几天脱下的秋裤,今天又穿上了,这天气真是变化无常.上周六(4.20)参加了一场关于RSIC-V的技术沙龙,第一次真正了解了RISC-V架构,正好今天不 ...
- Java描述设计模式(11):观察者模式
本文源码:GitHub·点这里 || GitEE·点这里 一.观察者模式 1.概念描述 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.观察者模式定义了一种一对多 ...
- C#属性方法 构造函数(不知道自己理解的对不对)
using System; namespace test { class Program { static void Main(string[] args) { Cat kitty = new Cat ...
- go语言中strings包常用方法
strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 strings.HasSuffix(s string, suffix ...
- MyBtis之关于#{}和${}
1.${}的用法的mapper文件配置: </select> <select id="selById2" resultType="com.sus ...
- Re-py交易
python在线反编译 https://tool.lu/pyc/ 获得源码 import base64 def encode(message): s = '' for i in message: x ...
- web系统测试策略
1.按系统架构可分为: 客户端测试.服务器端测试.网络上测试 2.按职能可分为: 应用功能的测试.web应用服务的测试.安全系统的测试.数据库服务的测试 3.按软件质量特性: (1)功能测试 链接测试 ...
- WPF 字体设置
原文:WPF 字体设置 WPF 主界面 更换字体 可全局 但是有的时候有的窗体 字体还是没变 可以做全局样式 <Window x:Class="CLeopardTestWpf.Main ...
- 如何将Azure SQL 数据库还原到本地数据库实例中
原文:https://www.jerriepelser.com/blog/restore-sql-database-localdb/ 原文作者: Jerrie Pelser 译文:如何将Azure S ...