Leetcode Lect2 Java 中的 Interface
什么是 Interface
Java接口(Interface)是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。打一个比方,接口好比一个戏中的角色,这个角色有一些特定的属性和操作,然后实现接口的类就好比扮演这个角色的人,一个角色可以由不同的人来扮演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。
有哪些面试常用的 Interface
Set
注重独一无二,该体系集合可以知道某物是否已经存在于集合中,不会存储重复的元素。Set的实现类在面试中常用的是:HashSet 与 TreeSet
- 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
- 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中存了两组数据(key与value),它们都可以是任何引用类型的数据,key不能重复,我们可以通过key取到对应的value。Map的实现类在面试中常用是:HashMap 和 TreeMap.
- HashMap
key无重复,value允许重复- 允许
key和value为空 - 数据无序
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的实现类在面试中常用是:LinkedList 和 ArrayList
- LinkedList
- 基于链表实现
- ArrayList
- 基于动态数组实现
- LinkedList 与 ArrayList 对比:
- 对于随机访问
get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针 - 对于新增和删除操作
add和remove,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的区别:
Leetcode Lect2 Java 中的 Interface的更多相关文章
- java中的interface
转载: Java不支持多重继承,即一个类只能有一个父类 为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口 接口是抽象方法和常量值定义的集合,是一种特殊的抽象类接口中只包含常量和方法的定 ...
- java中的interface接口
接口:java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法. java接口的特点如下: 1.java接口不能被实例化 2.java接口中声明的成员自动被设置为public,所以不存在pr ...
- java 中的interface是否继承object
首先我们从C++说起, c++可以多继承.也就是一个类型 --- class,可以继承自2个以上的父类型.多继承导致一个问题,很多人知道.例如,如果类型B,类型C均继承自类型A.然后类型D继承自类型B ...
- JAVA中abstract,interface,final,static语法
转自:http://www.cnblogs.com/yueue/archive/2010/04/20/1715863.html 一,抽象类:abstract 1,只要有一个或一个以上抽象方法的 ...
- java中functional interface的分类和使用
目录 简介 Functional Interface Function:一个参数一个返回值 BiFunction:接收两个参数,一个返回值 Supplier:无参的Function Consumer: ...
- java中的interface(接口)
概念 usb插槽就是现实中的一个接口 你可以把u盘都插在usb插槽上,而不用担心买来的u盘插不进插槽中不管是插电脑,还是插相机,还是插收音机原因是做usb的厂家和做各种设备的厂家都遵守了统一的规定包括 ...
- java中接口interface和private私有内部类怎样一块配合着用?
3.接口interface和private内部类协同工作[新手可忽略不影响继续学习]马克-to-win:由于是private内部类,外面无法访问甚至无法看到你编的源代码(如果在不同的包中),非常安全. ...
- java中接口interface可以持有多个类的共享常量
3.接口持有多个类的共享常量 接口另一主要功能,马克-to-win: 可以使用接口来引入多个类的共享常量.所有的这些变量名都将作为常量看待.所有定义在接口中的常量都默认为public.static和 ...
- java中接口interface有什么用呢?举例!
接口只有方法的定义,没有方法的任何实现.那这有什么意义呢?马克-to-win: 接口就像一个服务合同.接口只关心必须得干什么而不关心如何去实现它.有 意义吗?有意义.马克-to-win:比如我们的软件 ...
随机推荐
- vue 组件间传值方式
/* 父组件给子组件传值 1.父组件调用子组件的时候 绑定动态属性 <v-header :title="title"></v-header> 2.在子组件里 ...
- UNIX网络编程总结四
socket: 为了执行网络I/O,一个进程做的第一件事就是调用socket函数. family指明协议族,type指明类型,除非在原始套接口,protocol一般为0,并非所有的family,typ ...
- Zabbix分布式监控系统实践
https://www.zabbix.com/wiki/howto/install/Ubuntu/ubuntuinstall 环境介绍OS: Ubuntu 10.10 Server 64-bitSer ...
- CGfsb
这里补充一下%n是代表向参数赋值打印的字符个数 例如printf("AAAA%n",&a); 代表的是向a写入4 printf("AAAA%1n", & ...
- 对https的研究
HTTPS简介 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP ...
- java匿名内部类 (转载)
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...
- php中substr_compare()区分大小写吗
PHP substr_compare() 函数 定义和用法 substr_compare() 函数从指定的开始位置比较两个字符串. 提示:该函数是二进制安全且选择性地对大小写敏感(区分大小写). 语法 ...
- ueditor编辑器中从word中复制带图片的信息的操作演示
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- BZOJ 3879: SvT 虚树 + 后缀自动机
Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始 ...
- PHP Timer 页面运行时间监测类
转至:http://blog.csdn.net/fdipzone/article/details/20160567 php Timer 页面运行时间监测类,可按不同key监测不同的运行时间 Timer ...