Pentium.Labs

System全家桶:https://zhuanlan.zhihu.com/c_1238468913098731520

导航

Leetcode Lect2 Java 中的 Interface

什么是 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的语法

 

 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 
34 
35 
36 abstract class IntStack{
37     abstract void push(int val);
38     abstract int pop();
39     protected String stacktype;
40     public void getinfo(String stt){
41         stacktype=stt;
42         System.out.println("Hello "+stacktype);
43     }
44 }
45 
46 class IntStackArrayListImpl extends IntStack{
47     @Override
48     public void push(int val){
49     }
50 
51     @Override
52     public int pop(){
53     }
54 
55     public void printA(){
56     }
57 }
58 
59 class IntStackLinkedListImpl extends IntStack{
60     @Override
61     public void push(int val){
62     }
63 
64     @Override
65     public int pop(){
66     }     
67 }
68 //抽象类不允许被实例化( 不存在IntStack st=new IntStack() )
69 //抽象类可以包含抽象方法(只定义不实现),留给子类再实现。子类中必须实现所有抽象方法。
70 
71 
72 
73 //区别:abstract class只能单继承,只有一个父类
74 //interface可以多实现,一个类可以实现很多interface (eg: LinkedList既是List也是Queue)
75 //二者很多情况下可以互换

 

Abstract Class和Interface的区别:

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

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

 

posted on 2019-07-24 13:31  Pentium.Labs  阅读(304)  评论(0编辑  收藏  举报



Pentium.Lab Since 1998