public interface Zi<K,V> {
//我是接口
//通过Zi<K,V> zi的方式可以让我实现多态
//多态的好处是:
//1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承
//2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 //多态的真正作用 interface Entry<K,V> {
K getKey();
V getValue();
}
}
public class Zs<K,V> implements Zi<K,V>{
//我是一个带泛型参数的类
//通过Zs<Integer,String> t = new Zs<Integer,String>()创建实例时不用转化类型
//我实现了接口Zi.Entry<K,V> static final Entry<?,?>[] EMPTY_TABLE = {};
//我先是一个数组
//数组里的元素的数据结构是Entry<?,?>形式的
//Entry是内部静态类
//我被赋值为一个空的数组但我的结构是Entry<?,?>的
//我不能被修改和继承
//通过字面意思EMPTY_TABLE可以知道我的作用就是定义一个标识空表的常量 transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;
//EMPTY_TABLE被转换成了Entry<K,V>[]的形式
//因为Entry<?,?>里的参数是泛型所以可以被转换
//transient是瞬值的意思
//瞬值意味着table不会被序列化
//不会被序列化也意味着不能通过反序列化的形式获取它
//在这里table被赋值成了一个Entry<K,V>[]形式的空数组
//虽然是空数组其内部元素保留了Entry<K,V>的结构
//通过字面意思table可以知道我的作用就是定义了一个数据且我的初始值为一个空数组 public String put(K key, V value) {
if (table == EMPTY_TABLE) {//假如table还没有被赋值或者装入数据
return "table->"+table+"-----"+"///EMPTY_TABLE->"+EMPTY_TABLE+"-----"+"///value->"+value+"///null";
}
return "table->"+table+"-----"+"///EMPTY_TABLE->"+EMPTY_TABLE+"-----"+"///value->"+value+"///not null";
} //这里是我对接口Zi.Entry<K,V>的具体实现
static class Entry<K,V> implements Zi.Entry<K,V>{//to realization the interface final K key;//我被final修饰
//不可修改
//不可被继承 V value; //V是泛型
//是键值对里的值 Entry(K k, V v) {
//我是构造函数
key = k; //初始化key的值
value = v; //初始化value的值
} public final K getKey() {
return key;
} public final V getValue() {
return value;
} } }
public class Zh {

    public static void main(String []args) {
Zs<Integer,String> t = new Zs<Integer,String>();
String s = t.put(1,"hello world").toString();
System.out.println(s);
System.out.println(s.hashCode());
}
}

接口、接口实现、调用

这里只是对一些不常见的语法和概念进行一个大概的认知

可能并不是完全正确的

hashMap put方法 第二行代码 1的更多相关文章

  1. hashMap put方法 第二行代码

    if (table == EMPTY_TABLE) { inflateTable(threshold); } table transient Entry<K,V>[] table = (E ...

  2. hashMap put方法 第三行代码

    inflateTable(threshold) 分析: Hi.java public class Hi { //临界值(一个值最接近2的n次幂的数,比如7的临界值为8) int threshold; ...

  3. Kotlin实现《第一行代码》案例“酷欧天气”

    看过<第一行代码>的朋友应该知道“酷欧天气”,作者郭神用整整一章的内容来讲述其从无到有的过程. 最近正好看完该书的第二版(也有人称“第二行代码”),尝试着将项目中的Java代码用Kotli ...

  4. 20172327 2018-2019-1 《第一行代码Android》第二章学习总结

    学号 2017-2018-2 <第一行代码Android>第二章学习总结 教材学习内容总结 - 活动是什么: 活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件 ...

  5. 1.3.4分析你的第一个Android程序——Android第一行代码(第二版)笔记

    切换项目结构模式 Project模式的项目结构 我们将项目切换成Project模式,这就是真实的目录结构. .gradle和.idea 这两个目下放置的都是Android Studio自动生成的一些文 ...

  6. 第一行代码 Android 第二版到货啦

    今日android第一行代码[第二版]已到,收获的季节到了 先看一下封面 书签: 以后就把空闲时间送给它吧 先来看一下本书的目录: 第1章 开始启程--你的第1行Android代码 第2章 先从看得到 ...

  7. 不写1行代码,在Mac上体验ASP.NET 5的最简单方法

    昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...

  8. Android 第一行代码(第二版)分享

    今天从网上好不容易看到了别人转发的pdf版的 第一行代码通过下载我把它存在了百度云里面了与大家共享 http://pan.baidu.com/s/1bRztF4

  9. HTML5游戏实战(4): 20行代码实现FlappyBird

    这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努 ...

随机推荐

  1. HTML5学习笔记(十五):方法

    在一个对象中绑定函数,称为这个对象的方法. 在JavaScript中,对象的定义是这样的: var xiaoming = { name: '小明', birth: 1990 }; 但是,如果我们给xi ...

  2. FFmpeg(4)-使用avformat_find_stream_info()来探测获取封装格式的上下文信息

    /** * Read packets of a media file to get stream information. This * is useful for file formats with ...

  3. distinct aggregation

    https://docs.google.com/document/d/1zj6OA-K2hi7ah8Fo-xTQB-mVmYfm6LsN2_NHgTCVmJI/edit# https://issues ...

  4. (原创)c++11中 function/lamda的链式调用

    关于链式调用,比较典型的例子是c#中的linq,不过c#中的linq还只是一些特定函数的链式调用.c++中的链式调用更少见因为实现起来比较复杂.c++11支持了lamda和function,在一些延迟 ...

  5. DIOCP开源项目-DIOCP3的重生和稳定版本发布

    DIOCP3的重生 从开始写DIOCP到现在已经有一年多的时间了,最近两个月以来一直有个想法做个 30 * 24 稳定的企业服务端架构,让程序员专注于逻辑实现就好.虽然DIOCP到现在通讯层已经很稳定 ...

  6. 笔记本貌似好了(HP 450 卡)

    2013年9月份在苏宁上 买了个HP450,配置应该算还勉强,i5, 4G, 照理说一般LOL,DOTA,应该还可以.但是经常在打完一盘后,切出来,卡的要命,一直没有解决,昨天晚上虚拟机切出来,更是, ...

  7. iframe高度自适应方法大全

    http://www.3tii.com/993.html http://caibaojian.com/iframe-adjust-content-height.html http://www.jb51 ...

  8. SQLite三种JDBC驱动的区别

    在DBeaver中看到SQLite有三种JDBC驱动,查了它们官方网站的相关解释,发现它们还是挺不一样的.   SQLite Wrapper by Christian http://www.ch-we ...

  9. 解决问题:swiper动态加载图片后无法滑动

    原因:swiper在初始化的时候会扫描swiper-wrapper下面的swiper-slide的个数,从而完成初始化,但是由于动态加载时在初始化之后的动作,所以导致无法滑动. 解决方案 1:在动态获 ...

  10. tensorboard简单使用

    代码写的再好,没有图别人也不知道好在哪. 我们在使用tensorflow的时候,使用tensorboard可以直观的看到我们的网络结构,甚至它可以计算卷积和池化的维度(我不知道是不是因为我已经运行了一 ...