什么是 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. linux里面以指定用户运行命令

    一.chroot方式 [root@localhost ~]# chroot --userspec "nginx:nginx" "/" sh -c "w ...

  2. Wireshark中的结果分析

    Header checksum: 0x9899 [validation disabled] 因为,wireshark不自动做tcp校验和的检验.原因是因为:有时tcp校验和会由网卡计算,因此wires ...

  3. 关于pug的笔记

    一.简介 Pug 是一款健壮.灵活.功能丰富的模板引擎,专门为 Node.js 平台开发.Pug 是由 Jade 改名而来,他可以帮助我们写html的时候更加的简单明了.安装.使用pug的过程打开cm ...

  4. java8-Stream集合操作快速上手

    java8-Stream集合操作快速上手   目录 Stream简介 为什么要使用Stream 实例数据源 Filter Map FlatMap Reduce Collect Optional 并发 ...

  5. Apache HttpClient之fluent API的使用

    该方法为Apache HttpClient 4.5以上的版本支持,在官网有明确的说明. 对比以前的方式,其优点是代码更简洁,同时为线程安全的.仅举一个最简单的post栗子 JAR包信息: <de ...

  6. Java+Maven的工程运行Sonar的方式

    step 1:在maven->setting.xml中进行配置 修改mvn工程所用的setting.xml文件,在<profiles></profiles>节点中增加: ...

  7. [CSP-S模拟测试]:甜圈(线段树)

    题目描述 $D$先生,是一个了不起的甜甜圈制造商.今天,他的厨房准备在日出之前制作甜甜圈.$D$先生瞬间完成了$N$个油炸圈饼.但是,这些油炸圈饼得先经过各种装饰任务才可以成为甜甜圈销售:填充奶油,浸 ...

  8. Vue子组件传递数据给父组件

    子组件通过this.$emit(event,data)传递数据到父组件 以下是例子: father.vue 父组件 <template> <div> <child @ne ...

  9. Windows建立目录软连接

    创建:mklink /j "I:\dst" "I:\src" 删除: rmdir "I:\dst"

  10. 测开之路七十六:linux变量和环境变量

    变量 赋值 variable=0,访问 $var或${var} 参数 $n 用``引住的会先执行(~键) 位置参数 环境变量/etc/profile:全局的环境变量 . bash_profile:用户 ...