什么是 Interface

Java接口(Interface)是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。打一个比方,接口好比一个戏中的角色,这个角色有一些特定的属性和操作,然后实现接口的类就好比扮演这个角色的人,一个角色可以由不同的人来扮演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。

有哪些面试常用的 Interface

Set

注重独一无二,该体系集合可以知道某物是否已经存在于集合中,不会存储重复的元素。Set的实现类在面试中常用的是:HashSetTreeSet

  • HashSet

    • 无重复数据
    • 可以有空数据
    • 数据无序
  1. Set<String> set = new HashSet<>();
  2. for (int i = 1; i < 6; i ++) {
  3. set.add(i + "");
  4. }
  5. set.add("1"); //不会重复写入数据
  6. set.add(null);//可以写入空数据
  7. Iterator<String> iter = set.iterator();
  8. while (iter.hasNext()) {
  9. system.out.print(iter.next() + " ");//数据无序
  10. }// 输出(无序)为 3 4 1 5 null 2
 
HashSet 基于HashMap实现,底层使用HashMap保存所有元素。
HashSet 无序(存入和取出的顺序不同),不重复,无索引。底层是哈希表结构,也称散列表结构,查找和删除快,添加慢

  • TreeSet

    • 无重复数据
    • 不能有空数据
    • 数据有序
  1. Set<String> set = new TreeSet<>();
  2. for (int i = 1; i < 6; i ++) {
  3. set.add(i + "");
  4. }
  5. set.add("1"); //不会重复写入数据
  6. //set.add(null);//不可以写入空数据
  7. Iterator<String> iter = set.iterator();
  8. while (iter.hasNext()) {
  9. system.out.print(iter.next() + " ");//数据有序
  10. }// 输出(有序)为 1 2 3 4 5

TreeSet是基于TreeMap实现的。TreeMap是一个有序的二叉树,那么同理TreeSet同样也是一个有序的,它的作用是提供有序的Set集合。

TreeSet可以对set集合中的元素进行排序,默认按照asic码表的自然顺序排序。之所以treeset能排序是因为底层是二叉树,数据越多越慢,TreeSet是依靠TreeMap来实现的

Map

Map用于存储具有映射关系的数据。Map中存了两组数据(keyvalue),它们都可以是任何引用类型的数据,key不能重复,我们可以通过key取到对应的value。Map的实现类在面试中常用是:HashMapTreeMap.

  • HashMap

    • key 无重复,value 允许重复
    • 允许 keyvalue 为空
    • 数据无序
  1. public class Solution {
  2. public static void main(String[] args){
  3. Map<String, String> map = new HashMap<>();
  4. for (int i = 5; i > 0; i --) {
  5. map.put(i + "", i + "");
  6. }
  7. map.put("1","1");//key无重复
  8. map.put("11","1");//value可以重复
  9. map.put(null, null);//可以为空
  10. for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {
  11. String key = (String)i.next();
  12. String value = map.get(key);
  13. System.out.println("key = " + key + ", value = " + value);
  14. }
  15. }
  16. }
  17. //输出
  18. /*
  19. key = 11, value = 1
  20. key = null, value = null
  21. key = 1, value = 1
  22. key = 2, value = 2
  23. key = 3, value = 3
  24. key = 4, value = 4
  25. key = 5, value = 5
  26. */
  27. //输出顺序与输入顺序无关
  • TreeMap

    • key 无重复,value 允许重复
    • 不允许有null
    • 有序(存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出)
  1. public class Solution {
  2. public static void main(String[] args){
  3. Map<String, String> map = new TreeMap<>();
  4. for (int i = 5; i > 0; i --) {
  5. map.put(i + "", i + "");
  6. }
  7. map.put("1","1");//key无重复
  8. map.put("11","1");//value可以重复
  9. //map.put(null, null);//不可以为空
  10. for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {
  11. String key = (String)i.next();
  12. String value = map.get(key);
  13. System.out.println("key = " + key + ", value = " + value);
  14. }
  15. }
  16. }
  17. //输出
  18. /*
  19. key = 1, value = 1
  20. key = 11, value = 1
  21. key = 2, value = 2
  22. key = 3, value = 3
  23. key = 4, value = 4
  24. key = 5, value = 5
  25. */
  26. //输出顺序位String排序后的顺序

Hashmap和Treemap的区别:https://www.cnblogs.com/williamjie/p/9099130.html

List

一个 List 是一个元素有序的、可以重复(这一点与Set和Map不同)、可以为 null 的集合,List的实现类在面试中常用是:LinkedListArrayList

  • LinkedList

    • 基于链表实现
  • ArrayList
    • 基于动态数组实现
  • LinkedListArrayList 对比:
    • 对于随机访问getset,ArrayList绝对优于LinkedList,因为LinkedList要移动指针
    • 对于新增和删除操作addremove,LinkedList比较占优势,因为ArrayList要移动数据

Queue

队列是一种比较重要的数据结构,它支持FIFO(First in First out),即尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。

  • PriorityQueue

    • 基于堆(heap)实现
    • 非FIFO(最先出队列的是优先级最高的元素)
  • LinkedList
    • 基于链表实现
    • FIFO

Java Interface的语法

  1. interface IntStack{
  2. void push(int val);
  3. int pop();
  4. }
  5.  
  6. class IntStackArrayListImpl implements IntStack{
  7. @Override
  8. public void push(int val){
  9. }
  10.  
  11. @Override
  12. public int pop(){
  13. }
  14.  
  15. public void printA(){
  16. }
  17. }
  18.  
  19. class IntStackLinkedListImpl implements IntStack{
  20. @Override
  21. public void push(int val){
  22. }
  23.  
  24. @Override
  25. public int pop(){
  26. }
  27. }
  28. //interface只需定义方法,不实现。默认全是public
  29. //interface定义了class需要遵守的规则
  30. //接口的作用:可以在调用时用IntStack同时表示IntStackArrayListImpl和IntStackLinkedListImpl两种类,增加代码可复用性(但只能用接口中定义好的方法,例如printA()就不能用)
  31. //eg: List是ArrayList和LinkedList的接口
  32.  
  33. abstract class IntStack{
  34. abstract void push(int val);
  35. abstract int pop();
  36. protected String stacktype;
  37. public void getinfo(String stt){
  38. stacktype=stt;
  39. System.out.println("Hello "+stacktype);
  40. }
  41. }
  42.  
  43. class IntStackArrayListImpl extends IntStack{
  44. @Override
  45. public void push(int val){
  46. }
  47.  
  48. @Override
  49. public int pop(){
  50. }
  51.  
  52. public void printA(){
  53. }
  54. }
  55.  
  56. class IntStackLinkedListImpl extends IntStack{
  57. @Override
  58. public void push(int val){
  59. }
  60.  
  61. @Override
  62. public int pop(){
  63. }
  64. }
  65. //抽象类不允许被实例化( 不存在IntStack st=new IntStack() )
  66. //抽象类可以包含抽象方法(只定义不实现),留给子类再实现。子类中必须实现所有抽象方法。
  67.  
  68. //区别:abstract class只能单继承,只有一个父类
  69. //interface可以多实现,一个类可以实现很多interface (eg: LinkedList既是List也是Queue)
  70. //二者很多情况下可以互换

Abstract Class和Interface的区别:

https://www.jianshu.com/p/c4f023d02f0c

https://blog.csdn.net/aptentity/article/details/68942916

Leetcode Lect2 Java 中的 Interface的更多相关文章

  1. java中的interface

    转载: Java不支持多重继承,即一个类只能有一个父类 为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口 接口是抽象方法和常量值定义的集合,是一种特殊的抽象类接口中只包含常量和方法的定 ...

  2. java中的interface接口

    接口:java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法. java接口的特点如下: 1.java接口不能被实例化 2.java接口中声明的成员自动被设置为public,所以不存在pr ...

  3. java 中的interface是否继承object

    首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...

  4. JAVA中abstract,interface,final,static语法

    转自:http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html 一,抽象类:abstract     1,只要有一个或一个以上抽象方法的 ...

  5. java中functional interface的分类和使用

    目录 简介 Functional Interface Function:一个参数一个返回值 BiFunction:接收两个参数,一个返回值 Supplier:无参的Function Consumer: ...

  6. java中的interface(接口)

    概念 usb插槽就是现实中的一个接口 你可以把u盘都插在usb插槽上,而不用担心买来的u盘插不进插槽中不管是插电脑,还是插相机,还是插收音机原因是做usb的厂家和做各种设备的厂家都遵守了统一的规定包括 ...

  7. java中接口interface和private私有内部类怎样一块配合着用?

    3.接口interface和private内部类协同工作[新手可忽略不影响继续学习]马克-to-win:由于是private内部类,外面无法访问甚至无法看到你编的源代码(如果在不同的包中),非常安全. ...

  8. java中接口interface可以持有多个类的共享常量

    3.接口持有多个类的共享常量  接口另一主要功能,马克-to-win: 可以使用接口来引入多个类的共享常量.所有的这些变量名都将作为常量看待.所有定义在接口中的常量都默认为public.static和 ...

  9. java中接口interface有什么用呢?举例!

    接口只有方法的定义,没有方法的任何实现.那这有什么意义呢?马克-to-win: 接口就像一个服务合同.接口只关心必须得干什么而不关心如何去实现它.有 意义吗?有意义.马克-to-win:比如我们的软件 ...

随机推荐

  1. WEB服务动静结合

    基本介绍 1)WEB服务仅能处理静态请求,如果处理动态请求则需要对应的动态资源服务软件,即:应用程序服务软件 2)常见的应用服务软件有:PHP.Java.Python等 3)问题:WEB服务如何与外部 ...

  2. 通过反射获取方法的参数名称(JDK8以上支持)

    方法的参数名,在很多时候我们是需要反射得到的.但是在java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比.(java是静态 ...

  3. django之静态文件的设置

    一:静态文件 Django中提供了一种解析的方式配置静态文件路径.静态文件可以放在项目根目录下,也可以放在应用的目录下,由于有些静态文件在项目中是通用的,所以推荐放在项目的根目录下,方便管理. 为了提 ...

  4. 企业级监控软件zabbix搭建部署之zabbix server的安装

    企业级监控软件zabbix搭建部署之zabbix server的安装 zabbix线上已经应用半年多了,关于zabbix在生产环境中的使用心得,以及一些经验写下来,希望让大家少走弯路,共同学习! 环境 ...

  5. Android 播放器开发

    GSY https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/USE.md 阿里云播放器 https://helpcdn.aliyun.co ...

  6. 数据库(一):事务的特性与事务(在同一个 JVM 中)的传递

    参考文章 https://blog.csdn.net/shuaihj/article/details/14163713 https://blog.csdn.net/shfqbluestone/arti ...

  7. Flask路由之重定向

    Flask框架提供了请求重定向功能,只需要使用 redirect_to即可, 示例代码如下: from flask import Flask, render_template, request, re ...

  8. 容器宽高不确定,图片宽高不确定,css如何实现图片响应式?

    图片响应式 在响应式开发中最烦恼的应该就是图片了,虽然图片设置max-width: 100%;可以让图片宽度占满容器,但是高度就不能自适应了.如果将容器高度限死,那么我们就要使用媒体查询来控制容器的高 ...

  9. php面试专题---12、JavaScript和jQuery基础考点

    php面试专题---12.JavaScript和jQuery基础考点 一.总结 一句话总结: 比较常考察的是JavaScript的HTML样式操作以及jQuery的选择器和事件.样式操作. 1.下列不 ...

  10. php面试专题---7、文件及目录处理考点

    php面试专题---7.文件及目录处理考点 一.总结 一句话总结: 用脑子:基本文件操作和目录操作了解一波,不必强求 1.不断在文件hello.txt头部写入一行“Hello World”字符串,要求 ...