Java 常用 Collection 继承关系与接口实现
Java Collection
List 接口
继承、接口实现关系:
public interface List<E> extends Collection<E>
方法定义:
- 在末尾添加一个元素:
boolean add(E e) - 在指定索引添加一个元素:
boolean add(int index, E e) - 删除指定索引的元素:
E remove(int index) - 删除某个元素:
boolean remove(Object e) - 获取指定索引的元素:
E get(int index) - 获取链表大小(包含元素的个数):
int size()
实现:
List<Integer> arrayList = new ArrayList<>();List<Integer> linkedList = new LinkedList<>();
Map 接口
继承、接口实现关系:
public interface Map<K,V>
实现:
Map<Integer, Integer> hashMap = new HashMap<>();(最常用)
SortedMap 接口
继承、接口实现关系:
public interface SortedMap<K,V> extends Map<K,V>
实现:
Map<Integer, Integer> treeMap = new TreeMap<>();必须实现
Comparable接口
Set 接口
继承、接口实现关系:
public interface Set<E> extends Collection<E>
方法定义:
- 将元素添加进
Set<E>:boolean add(E e) - 将元素从
Set<E>删除:boolean remove(Object e) - 判断是否包含元素:
boolean contains(Object e)
实现:
Set<Integer> hashSet = new HashSet<>();(最常用)
SortedSet 接口
继承、接口实现关系:
public interface SortedSet<E> extends Set<E>
实现:
Set<Integer> treeSet = new TreeSet<>();必须实现
Comparable接口
Queue 接口
继承、接口实现关系:
public interface Queue<E> extends Collection<E>
方法定义:
获取队列长度:
int size()throw Exception 返回false或null 添加元素到队尾 add(E e)boolean offer(E e)取队首元素并删除 E remove()E poll()取队首元素但不删除 E element()E peek()
实现:
Queue<Integer> queue = new LinkedList<>();(LinkedList<E>实现了Deque<E>接口,Deque<E>接口继承于Queue<E>接口)Queue<Integer> priorityQueue = new PriorityQueue<>();必须实现
Comparable接口
Deque 接口
继承、接口实现关系:
public interface Deque<E> extends Queue<E>
方法定义与对比:
| Queue | Deque | |
|---|---|---|
| 添加元素到队尾 | add(E e) / offer(E e) |
addLast(E e) / offerLast(E e) |
| 取队首元素并删除 | E remove() / E poll() |
E removeFirst() / E pollFirst() |
| 取队首元素但不删除 | E element() / E peek() |
E getFirst() / E peekFirst() |
| 添加元素到队首 | 无 | addFirst(E e) / offerFirst(E e) |
| 取队尾元素并删除 | 无 | E removeLast() / E pollLast() |
| 取队尾元素但不删除 | 无 | E getLast() / E peekLast() |
实现:
Deque<Integer> deque = new LinkedList<>();Deque<Integer> arrayDeque = new ArrayDeque<>();
建议:
Queue提供的add()/offer()方法在Deque中也可以使用,但是,使用Deque,最好不要调用offer(),而是调用offerLast()。
如果直接写deque.offer(),我们就需要思考,offer()实际上是offerLast(),我们明确地写上offerLast(),不需要思考就能一眼看出这是添加到队尾。
因此,使用Deque,推荐总是明确调用offerLast()/offerFirst()或者pollFirst()/pollLast()方法。面向抽象编程的一个原则:尽量持有接口,而不是具体的实现类。
我们发现LinkedList真是一个全能选手,它即是List,又是Queue,还是Deque。但是我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。
Stack 接口
继承、接口实现关系:
public class Stack<E> extends Vector<E>
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
方法定义:
- 把元素压栈:
push(E) - 把栈顶的元素弹出:
pop(E) - 取栈顶元素但不弹出:
peek(E)
实现:
通常使用 Deque 作为 Stack 使用。注意只调用 push()/pop()/peek() 方法,不要调用 addFirst()/removeFirst()/peekFirst() 方法,这样代码更加清晰。
参考:
集合- 廖雪峰的官方网站
java.util中关于各集合的源码
Java 常用 Collection 继承关系与接口实现的更多相关文章
- java常用集合框架关系
一.综合总图 1.所有集合类都位于java.util包下. 2.Java的集合类主要由两个接口派生而出:Collection和Map, 3.Collection和Map是Java集合框架的根接口,这两 ...
- java中的继承关系
1.定义 java中的继承是单一的,一个子类只能拥有一个父类:java中所有类的父类是java.lang.Object,除了这个类之外,每个类只能有一个父类: 而一个父类可以有多个子类,可以被多个子类 ...
- Java中的继承抽象类和接口
一.总结 1.使用extends关键字继承,eg: class Student extends Persion { ...}; 2.Java编程规范中类的首字母大写,方法的首字母小写单词首字母代谢,e ...
- JAVA构造方法,继承关系和SUPER关键字
SUPER可调用父类的构造方法,但要注意默认调用和参数调用. 同时,在继承类时,可以用SUPER调用其它非构造方法哟. class Test extends Object{ public Test() ...
- 【java】抽象类继承关系
抽象类: 抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充. 一个类不能同时被 abstract 和 final 修饰.如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将 ...
- Java学习之继承关系内存分配
假设有C继承B,B继承A; 继承会继承除private修饰的成员变量,方法.但不会继承构造器. 所以调用被继承下来的方法时,不需要指明主调者,但是调用构造器时,就需要指明主调者,那就是super.如果 ...
- java 常用的一些关键字
1.关键字extends 1.继承作用 优化代码,减少代码的重复使用. 2.继承使用时机 两个类之间必须要满足is a的关系 ,才能够拥有继承关系,不是任 何 情况下都允许继承 3.继承的使用注意事项 ...
- Java中Collection和Collections的区别(引用自:http://www.cnblogs.com/dashi/p/3597937.html)
1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Co ...
- Java笔记(十四)……抽象类与接口
抽象类概念 抽象定义: 抽象就是从多个事物中将共性的,本质的内容抽取出来. 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念. 抽象类: Java中可以定义没有方法体的方法,该方法的具体实现由子类完成 ...
随机推荐
- RHCE_DAY05
cron周期性计划任务 cron周期性计划任务用来定期执行程序,目前最主要的用途是定期备份数据 软件包名:cronie.crontabs 服务名:crond 日志文件:/var/log/cron cr ...
- 30K入职腾讯,全靠这份606页的Android面试指南
前言 光阴似箭,日月如梭,时间真的过得飞快. 加上实习,从事 Android 开发,差不多有 5 年了.在上家公司职务.薪酬感觉已经到达了天花板,没有上升的余地.而且在这家公司过于安逸了,想换个有挑战 ...
- Docker入门第一章
Docker为什么出现? 一款产品:开发到上线 两套环境!应用环境,应用配置! 可能在开发环境你的产品是正常的,但是到了线上环境你的产品可能就会出现各种原因,或许是因为环境的不同,也可能是因为配置的不 ...
- SpringBoot | 4.1 SpringMVC的自动配置
目录 前言 1. SpringMVC框架的设计与流程 1.1 SpringMVC框架的示意图 1.2 SpringMVC的组件流程 2. *自动配置的源码分析 2.1 导入Web场景启动器 2.2 找 ...
- 关于shell脚本——条件测试、if语句、case语句
目录 一.条件测试 1.1.表达说明 1.2.test命令 文件测试 1.3.整数值比较 1.4.字符串比较 1.5.逻辑测试 二.if语句 2.1.单分支结构 2.2.双分支结构 2.3.多分支结构 ...
- STM32—中断详解(配合按键中断代码,代码亲测)
在STM32中执行中断主要分三部分: 1.配置NVIC_Config()函数 2.配置EXTI_Config()函数 3.编写中断服务函数 (注:本文章所用代码为中断按键代码,实现了按键进入中断从而控 ...
- Longhorn,企业级云原生容器分布式存储 - 高可用
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...
- 从零开始实现简单 RPC 框架 5:网络通信之序列化
我们在接下来会开始讲网络通信相关的内容了.既然是网络通信,那必然会涉及到序列化的相关技术. 下面是 ccx-rpc 序列化器的接口定义. /** * 序列化器 */ public interface ...
- 【HMC Core 6.0全球上线】图形计算服务新插件,助力高画质3D手游创新
HMS Core 6.0已于7月15日全球上线,本次新版本向广大开发者开放了众多全新能力与技术.其中华为图形计算服务(CG Kit)开放了体积雾插件和流体插件,为3D手游画面的提升提供了坚实的技术基础 ...
- 利用pycharm创建DjangoWeb项目
1.打开pycharm开发工具:(开发服务器的搭建) File------->New Project-------->Django()