什么是 Interface

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

有哪些面试常用的 Interface

Set

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

  • HashSet

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

  • TreeSet

    • 无重复数据
    • 不能有空数据
    • 数据有序
Set<String> set = new TreeSet<>();
for (int i = 1; i < 6; i ++) {
set.add(i + "");
}
set.add("1"); //不会重复写入数据
//set.add(null);//不可以写入空数据
Iterator<String> iter = set.iterator();
while (iter.hasNext()) {
system.out.print(iter.next() + " ");//数据有序
}// 输出(有序)为 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 为空
    • 数据无序
public class Solution {
public static void main(String[] args){
Map<String, String> map = new HashMap<>();
for (int i = 5; i > 0; i --) {
map.put(i + "", i + "");
}
map.put("1","1");//key无重复
map.put("11","1");//value可以重复
map.put(null, null);//可以为空
for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {
String key = (String)i.next();
String value = map.get(key);
System.out.println("key = " + key + ", value = " + value);
}
}
}
//输出
/*
key = 11, value = 1
key = null, value = null
key = 1, value = 1
key = 2, value = 2
key = 3, value = 3
key = 4, value = 4
key = 5, value = 5
*/
//输出顺序与输入顺序无关
  • TreeMap

    • key 无重复,value 允许重复
    • 不允许有null
    • 有序(存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出)
public class Solution {
public static void main(String[] args){
Map<String, String> map = new TreeMap<>();
for (int i = 5; i > 0; i --) {
map.put(i + "", i + "");
}
map.put("1","1");//key无重复
map.put("11","1");//value可以重复
//map.put(null, null);//不可以为空
for (Iterator i = map.keySet().iterator(); i.hasNext(); ) {
String key = (String)i.next();
String value = map.get(key);
System.out.println("key = " + key + ", value = " + value);
}
}
}
//输出
/*
key = 1, value = 1
key = 11, value = 1
key = 2, value = 2
key = 3, value = 3
key = 4, value = 4
key = 5, value = 5
*/
//输出顺序位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的语法

 interface IntStack{
void push(int val);
int pop();
} class IntStackArrayListImpl implements IntStack{
@Override
public void push(int val){
} @Override
public int pop(){
} public void printA(){
}
} class IntStackLinkedListImpl implements IntStack{
@Override
public void push(int val){
} @Override
public int pop(){
}
}
//interface只需定义方法,不实现。默认全是public
//interface定义了class需要遵守的规则
//接口的作用:可以在调用时用IntStack同时表示IntStackArrayListImpl和IntStackLinkedListImpl两种类,增加代码可复用性(但只能用接口中定义好的方法,例如printA()就不能用)
//eg: List是ArrayList和LinkedList的接口 abstract class IntStack{
abstract void push(int val);
abstract int pop();
protected String stacktype;
public void getinfo(String stt){
stacktype=stt;
System.out.println("Hello "+stacktype);
}
} class IntStackArrayListImpl extends IntStack{
@Override
public void push(int val){
} @Override
public int pop(){
} public void printA(){
}
} class IntStackLinkedListImpl extends IntStack{
@Override
public void push(int val){
} @Override
public int pop(){
}
}
//抽象类不允许被实例化( 不存在IntStack st=new IntStack() )
//抽象类可以包含抽象方法(只定义不实现),留给子类再实现。子类中必须实现所有抽象方法。 //区别:abstract class只能单继承,只有一个父类
//interface可以多实现,一个类可以实现很多interface (eg: LinkedList既是List也是Queue)
//二者很多情况下可以互换

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. 使用BaGet来管理内部Nuget包

    有的时候,我们想要制作一些nuget包,供自己内部调用,不想公开出去,那么就需要一个能够集中管理nuget包的服务了,今天我来给大家介绍一款轻便好用的包管理服务-----BaGet 下载并部署BaGe ...

  2. 线程工具类 - Semaphore(信号量)

    Semaphore官方文档 一.使用信号量实现线程间的通信 /** * Demo:使用信号量实现线程间通信*/ public class SemaphoreDemo { public static v ...

  3. export default{} 和 new Vue()都是什么意思

    在生成.导出.导入.使用 Vue 组件的时候,有些新手就会常常被位于不同文件的 new Vue() 和 export default{} 搞得晕头转向.它们含义到底是什么,又有什么异同呢? 首先,Vu ...

  4. JDBC连接Hive数据库

    一.依赖 pom <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodi ...

  5. springboot2整合logback.xml动态修改日志打印级别

    今天找bug烦到了,生产上的日志级别不能修改,非常不利于排查问题,于是想到了动态修改日志打印级别, 因为上一周把项目升级成springboot2,并且使用logback.xml管理日志打印,所以修改也 ...

  6. nginx配置虚拟主机-端口号区分/域名区分

    Nginx实现虚拟机 可以实现在同一台服务运行多个网站,而且网站之间互相不干扰.同一个服务器可能有一个ip,网站需要使用80端口.网站的域名不同. 区分不同的网站有三种方式:ip区分.端口区分.域名区 ...

  7. 如何从Word带图粘贴到编辑器中

    这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...

  8. [STL]lower_bound&upper_bound

    源码 lower_bound template <class ForwardIterator, class T> ForwardIterator lower_bound (ForwardI ...

  9. 减轻Temporal AA 的 拖影问题(ghosting)

    Temporal AA 效率高,但是有拖影等问题,UE4中可以如下修改减轻拖影问题: 搜索到PostProcessTemporalAA.usf文件,打开,找到 #define AA_DYNAMIC_A ...

  10. java 中异常类

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...