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中可以定义没有方法体的方法,该方法的具体实现由子类完成 ...
随机推荐
- 靶机BlackMarket
工具:nmap.dirbuster.dirb.sqlmap.cewl.crunch.hydra 涉及的漏洞:弱口令 垂直越权 SQL注入 CVE-2016-5195脏牛提权(内核竞争提权漏洞) fla ...
- 华为eNSP基础入门-配置SSH远程登录
eNSP 华为模拟器ensp (Enterprise Network Simulation Platform) 是华为官方推出的一款强大的图形化网络仿真工具平台,主要对企业网路由器.交换机.WLAN等 ...
- 说实话,Android开发月薪3W,谁不酸呢?
近期有个网友在某匿名区晒字节跳动Offfer,毕业一年月薪3W,引发众多读者羡慕,纷纷留言酸了.酸了.但进大厂的要求还是蛮高的,需要在技术实力上有一定的积累,今天给大家分享一份高质量笔记, 助力大家技 ...
- 常用的Windows快捷键
常用的Windows快捷键 关闭触摸板(华硕电脑):Fn+F9 切换窗口:Alt + Tab任务视图:Win + Tab松开键盘界面不会消失 创建新的虚拟桌面:Win + Ctrl + D(新开一个干 ...
- vue3.0安装
一 .vue3.0安装 vue3.0安装 个人推荐以下2种 (1). 开发工具的对应代码中 插入CDN <script src="https://unpkg.com/vue@next& ...
- SpringCloud升级之路2020.0.x版-13.UnderTow 核心配置
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Undertow ...
- STM32_从SystemInit、__main到main()
STM32 的 SystemInit() 和 __main Author by [YuCloud](https://www.cnblogs.com/yucloud/) 上篇文章 STM32启动代码分析 ...
- Xilinx约束学习笔记(一)—— 约束方法学
<Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...
- docker安装完权限问题
在用户权限下docker 命令需要 sudo 否则出现以下问题 通过将用户添加到docker用户组可以将sudo去掉,命令如下 sudo groupadd docker #添加docker用户组 su ...
- 【spring 注解驱动开发】spring组件注册
尚学堂spring 注解驱动开发学习笔记之 - 组件注册 组件注册 1.@Configuration&@Bean给容器中注册组件 2.@ComponentScan-自动扫描组件&指定扫 ...