JAVA集合继承关系图介绍和Collection接口深刻理解
集合【必须掌握】
集合引出:
由于前面我们保存数据使用的是数组,那么数组不足的地方,我们分析如下:
- 长度开始时必须指定,而且一旦指定,不能更改
- 保存的必须为同一类型的元素
- 使用数组进行增加、删除元素时比较麻烦
写出Person
数组扩容示意代码:
Person[] persons = new Person[1];//大小是1
persons[0] = new Person();//增加新的Person对象
Person[] persons2 = new Person[persons.length+1];//新创建数组
//使用 for拷贝
persons2[persons2.length-1] = new Person();//添加新的对象
集合的好处
- 可以动态保存任意多个对象,使用比较方便
- 提供一系列方便的操作对象的方法【
add
remove
set
get
等】 - 使用集合添加,删除新元素方便
注意是集合存放的是引用数据类型,基本数据会自动装箱成引用数据类型
集合继承体系图
Collection
接口 特点 方法
Collection
接口的子接口:List
实现类:
ArrayList
LinkedList
Vector
Collection
接口的子接口:Set
实现类 :HashSet
LinkedHashSet
Map
接口 特点 方法 遍历方式
Map
接口的实现类 :HashMap
Hashtable
等
Collections
工具类的使用
JAVA
集合主要为两大类:【单例集合 双例集合】【必须记住】
Collection
实现Collection
接口的类或子接口,都可以使用迭代器的方式来遍历集合,迭代器的方法来住于Iterable
接口
Map
Collection
接口 和 常用方法
Collection
接口实现类的特点
public interface Collection<E> extends iterable<E>{}
特点:
Collection
实现子类可以存放多个元素,每个元素可以是Object
- 有些
Collection
的实现类,可以存放重复的元素,有些不可以 - 有些
Collection
的实现类,有些是有序的【List
】,有些是无序的【Set
】 Collection
接口没有直接的实现子类,是通过它的子接口Set
和List
来实现的
Collection
接口常用方法
1. add:添加单个元素
2. remove:删除指定元素
3. contaions:查找元素是否为空
4. size:获取元素个数
5. isEmppty:判断是否为空
6. clear:清空
7. addAll:添加多个元素
8. contaionsAll:查找多个元素是否都存在
9. removeAll:删除多个元素
10. toArray:返回Object[]
Modifier and Type | Method and Description |
---|---|
boolean
|
add(E e) 确保此集合包含指定的元素(可选操作)。
|
boolean
|
addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(可选操作)。
|
void
|
clear() 从此集合中删除所有元素(可选操作)。
|
boolean
|
contains(Object o) 如果此集合包含指定的元素,则返回 true 。
|
boolean
|
containsAll(Collection<?> c) 如果此集合包含指定 集合 中的所有元素,则返回true。
|
boolean
|
isEmpty() 如果此集合不包含元素,则返回 true 。
|
Iterator<E>
|
iterator() 返回此集合中的元素的迭代器对象。
|
boolean
|
remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
|
boolean
|
removeAll(Collection<?> c) 删除指定集合中包含的所有此集合的元素(可选操作)。
|
int
|
size() 返回此集合中的元素数。
|
Object[]
|
toArray() 返回一个包含此集合中所有元素的数组。
|
Collection
常见方法案例代码
package collection_.collectionP;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;/*** @author: 海康* @version: 1.0*/
public class Collection01 {public static void main(String[] args) {List c = new ArrayList();// 注意是集合存放的是引用数据类型,基本数据会自动装箱成引用数据类型// 添加元素c.add("海康");c.add(1.68);//基本数据类型会自动装箱// remove 删除元素 [删除元素有两种方式是重载的]// 一个是传入索引 返回Object 对象// 一个是传入对象名 返回布尔值
// boolean r = c.remove("海康");
// Object remove = c.remove(0);// contains 查找元素是否存在boolean b = c.contains(1.68);//传入的是对象名System.out.println(b);// size 获取元素个数int size = c.size();System.out.println("获取元素的个数="+size);// isEmpty 判断集合是否为空boolean empty = c.isEmpty();System.out.println("判断集合是否为空="+empty);// clear 清空
// c.clear();//清空集合中所有元素// addAll 添加多个元素Collection c2 =new ArrayList();c2.add("湛江");c2.add("湛江");boolean b1 = c.addAll(c2);System.out.println(c);// containsAll 判断多个元素是否存在boolean b2 = c.containsAll(c2);System.out.println(b2);// removeAll 删除多个元素boolean b3 = c.removeAll(c2);System.out.println(b3);// toArray 返回Object[] 数组Object[] objects = c.toArray();}
}
Conllection
接口遍历元素方式1-使用Iterator
【迭代器】
基本介绍:
迭代的步骤:
1.先获取迭代器对象Interatior<E>
2.使用迭代器中的方法判断是否还有下一个元素【iteratior.hasNext()
】
3.再使用迭代器中的方法返回集合中的元素【iteratior.next()
】
在调用iterator.next()
方法之前必须要调用iterator.hasNext()
进行检测。若不调用,且下一条记录无效时,直接调用iterator.next()
就会抛出异常NoSchElementException
异常
Interatior
接口中的方法
Modifier and Type | Method and Description |
---|---|
default void
|
forEachRemaining(Consumer<? super E> action) 对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。
|
boolean
|
hasNext() 如果迭代具有更多元素,则返回 true 。
|
E
|
next() 返回迭代中的下一个元素。
|
default void
|
remove() 从底层集合中删除此迭代器返回的最后一个元素(可选操作)。
|
迭代器遍历方式:
package collection_.collectionP;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** @author: 海康* @version: 1.0*/
public class Iterator01 {public static void main(String[] args) {Collection c = new ArrayList();c.add(new Book("三国演义","罗",10.1));c.add(new Book("小李飞刀","古",10.2));System.out.println(c);//直接返回的是集合中的全部元素// 如果现在一个一个的遍历集合中的元素,就需要用到迭代器// 遍历集合的三步://1.获取迭代器Iterator iterator = c.iterator();//获取迭代器对象//2.判断是否有下一个元素
// while (iterator.hasNext()){// //3.返回指针指向当前的元素
// Object obj = iterator.next();
// System.out.println(obj);//默认调用toString方法【自动实现动态绑定机制】
// }// 生成迭代器并遍历集合的快捷键 快速生成 while ==> ititwhile (iterator.hasNext()) {Object obj = iterator.next();System.out.println(obj);}// 当退出 while 循环后,这时 iterator 迭代器,指向最后的元素,如果此时再想取元素,// 直接抛出 NoSuchElementException 异常
// iterator.next();//NoSuchElementException// 如果此时再想取集合中的元素,就需要重置我们的迭代器iterator = c.iterator();// 再一次遍历}
}class Book {private String name;private String author;private double price;public Book() {}public Book(String name, String author, double price) {this.name = name;this.author = author;this.price = price;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +'}';}
}
当退出 while
循环后,这里iterator
迭代器,指向最后一个元素,如果此时再想取元素直接就会抛出NoSuchElementException
异常。这时就需要重置迭代器 ,iterator = collection.iterator()
Collection
接口遍历对象方式2-for
循环增加
增加for
循环,可以代替iterator
迭代器,特点:增加for
就是简化版的iterator
,本质是一样的,只能用于遍历集合或数组。
基本语法:for(元素类型 元素名: 集合名或数组名){访问元素
}
案例演示【演示遍历Book
,并使用Debug
源码来证明】
package collection_.collectionP;import java.util.ArrayList;
import java.util.Collection;/*** @author: 海康* @version: 1.0*/
public class For01 {public static void main(String[] args) {Collection c = new ArrayList();c.add(new Book("三国演义","罗",10.1));c.add(new Book("小李飞刀","古",10.2));c.add(new Book("天涯明月","金",12.8));// 使用增加for循环【本质上还是使用了迭代器】for (Object book:c) {System.out.println(book);}}
}
package collection_.collectionP;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** @author: 海康* @version: 1.0*/
public class CollectionExercise01 {/*** 创建 3个 Dog【name,age】 类对象,放入到ArrayList中,赋给 List 引用* 用迭代器和增加for循环两种方式来遍历* 重写Dog 的 toString方法,输出name和age*/public static void main(String[] args) {Collection list = new ArrayList<Dog>();list.add(new Dog("小黄",8));list.add(new Dog("小明",5));list.add(new Dog("大黄",11));// 使用迭代器的方式遍历/*** 使用迭代器的方式遍历需要有三步:* 1.第一步是获取迭代器对象* 2.第二步判断是否有元素* 3.第三步获取元素*/Iterator iterator = list.iterator();//获取迭代器对象while (iterator.hasNext()){Object dog = iterator.next();System.out.println(dog);//默认调用toString方法}// 使用增加 for循环for (Object dog:list) {System.out.println(dog);//默认调用toString方法}}
}
class Dog {private String name;private int age;public Dog() {}public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}
JAVA集合继承关系图介绍和Collection接口深刻理解相关推荐
- java集合类继承关系图_java集合继承关系图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...
- Java 10 常用集合继承关系图
概述 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用. 类图如下: 1.Iterable与Iterator接口之间的区别 我看到好多网上的文章类图 ...
- Java集合框架系列教程三:Collection接口
翻译自:The Collection Interface 一个集合表示一组对象.Collection接口被用来传递对象的集合,具有最强的通用性.例如,默认所有的集合实现都有一个构造器带有一个Colle ...
- Java集合(一)Java集合及其关系
本文目录 1 Java集合接口继承关系和实现 1.1 Java集合包 1.2 Java集合接口关系 1.3 Java集合框架类关系及特性 2 Java集合接口/类简述 2.1 Collection,i ...
- java集合UML类图 总览
Java集合框架主要包括两种类型的容器, 一种是集合(Collection),存储一个元素集合, Collection 接口又有 3 种子类型,List.Set 和 Queue. 另一种是图(Map) ...
- Java反射-继承关系
目录 反射类型继承关系图 类 Type ParameterizedType TypeVariable WildcardType GenericArrayType Annotation Annotate ...
- C++版数据结构继承关系图
文章目录 1 C++版数据结构继承关系图 1 C++版数据结构继承关系图 http://www.plantuml.com/plantuml/png/RP0nJaCn38Ptd-AfUs_0K4JPAW ...
- android 中组件继承关系图,一目了然
View继承关系图 Adapter适配器继承关系图 Activity继承关系图
- JS面向对象——Object对象的方法补充、原型继承关系图
一.Object.create() 这个方法用于创建一个新对象.被创建的对象的__proto__指向create函数第一个参数的原型对象prototype,在创建新对象时可以通过create函数第二个 ...
- 使用IDEA工具查看Java类层次结构关系图
本文图文讲解开发中IDEA常用查看Java类层次结构关系图方法. 首先需要强调的是idea工具版本以及操作系统平台不同,界面.功能.快捷键等会有所不同,但总体是一致的,我这里是在macOS Big S ...
最新文章
- 人工智能的“天罗地网”
- 在word、excel中如果运用VBA进行编程?
- python程序设计试卷_Python程序设计试题库
- 鸿蒙系统方舟运行时,方舟编译器立功!第三方App已经落地,距离鸿蒙系统还会远吗?...
- Java 避免精度丢失之BigDecimal 运算
- WINCE6.0+S3C2443的启动过程---eboot1
- linux kvm安装windows,Linux下KVM安装windows
- Goalng小demo二:客户信息关系系统
- 输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。...
- 【名词解释】7.UML类图
- QT音乐播放器(接入网易云API)
- AVOD、SVOD、TVOD、PVOD:揭秘视频点播商业模式
- 图像处理半色调技术(matlab/C++)
- cms07——单页模版制作教程
- 反编译exe软件_Winnti组织:利用ShadowPad和Winnti恶意软件针对高校发动攻击
- 数字证书与数字签名(图文并茂)详解
- 制作公司组织结构图的案例
- ORB_SLAM2 原理、论文解读、代码流程
- Linux0.11系统调用之execve流程解析
- ecdsa JAVA 私钥推导公钥_ECDSA(椭圆曲线数字签名算法)