网易云课堂Java进阶学习笔记系列01 -- 第3周 对象容器

个人为了复习一下Java基础, 在网易云课堂上报了翁恺老师的Java语言程序设计进阶篇的课程, 主要看了其中的4. 对象容器, 6. 设计原则, 7. 抽象与接口, 8. 控制反转与MVC模式这几部分的内容.
同时也决定将这些内容都以博客的形式来复习和总结一下!

对象容器

  1. 顺序容器
  2. 对象数组
  3. 集合容器(Set)
  4. Hash表

顺序容器

在程序设计中, 我们如果要记录很多数? 这时, 我们一般会去定义并创建一个数组.
int[] numbers = new int[100];

我们知道, 数组是一种数据结构, 能记录同一种类型的多个数据.

  • 数组中的每个数据叫做元素
  • 所有的元素具有相同的数据类型
  • 一旦创建, 不能改变其大小

而这里的数组就是一个容器.
是一种容器(放东西的东西), 可以理解为存储数据的东西.

在这里, 由数组引入了一种顺序容器ArrayList, 下面是课程中演示的代码NoteBook.java, 主要演示了其用法:

package demo;

import java.util.ArrayList;

/**
 * @author menglanyingfei
 * @date 2017-7-14
 */
public class NoteBook {
    private ArrayList<String> notes = new ArrayList<String>();
    //private int size = 0;
    
    public void add(String s) {
        notes.add(s);
        //size++;
    }
    
    public void add(String s, int location) {
        notes.add(location, s);
    }
    
    public int getSize() {
        return notes.size();
    }
    
    public String getNote(int index) {
        return notes.get(index);
    }
    
    public void removeNote(int index) {
        notes.remove(index);
    }
    
    public String[] list() {
        String[] a = new String[notes.size()];
//      for (int i = 0; i < notes.size(); i++) {
//          a[i] = notes.get(i);
//      }
        
        notes.toArray(a);
        return a;       
    }
    
    public static void main(String[] args) {
        String[] a = new String[2];
        a[0] = "first";
        a[1] = "second";
        
        NoteBook nb = new NoteBook();
        nb.add("first");
        nb.add("second");
        nb.add("third", 1);
        System.out.println(nb.getSize());
        System.out.println(nb.getNote(0));
        // 会引起异常
        //System.out.println(nb.getNote(10));
        System.out.println(nb.getNote(1));
        nb.removeNote(1);
        String[] arr = nb.list();
        for (String str : arr) {
            System.out.println(str);
        }
    }
}

对象数组

核心观念(这句话说得很经典!):
<font color="red">当数组的元素的类型是类的时候,数组的每一个元素其实只是对象的管理者而不是对象本身。</font>
因此,仅仅创建数组并没有创建其中的每一个对象!

集合容器(Set)

在这里, Set集合可以理解为数学中的集合的概念:
所有的元素都具有唯一的值,元素在其中没有顺序。

Hash表

Hash表,有的地方翻译为散列表。
传统意义上的Hash表,是能以int做值,将数据存放起来的数据结构。
Java的Hash表可以以任何实现了hash()函数的类的对象做值来存放对象。
Hash表是非常有用的数据结构,熟悉它,充分使用它,往往能起到事半功倍的效果。

对比HashMap和ArrayList:
在ArrayList里, 我们可以存重复的单值, 而在HashMap的双列集合中, 有K, V两个值, K是唯一的, 而V是可以重复的.
示例:

Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "haha");
        map.put(2, "happy");
        map.put(3, "good");
        map.put(1, "ha");
        map.put(5, "good");
        
        System.out.println(map);
        // {1=ha, 2=happy, 3=good, 5=good}

最后, 也贴出老师的示例代码, 是一步步跟着敲的!
Coin.java:

package demo;

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author menglanyingfei
 * @date 2017-7-14
 */
public class Coin {
    // HashMap  K是唯一的
    private HashMap<Integer, String> coinnames = new HashMap<Integer, String>();

    public Coin() {
        coinnames.put(1, "penny");
        coinnames.put(10, "dime");
        coinnames.put(25, "quarter");
        coinnames.put(50, "half-dollar");
        coinnames.put(50, "五毛");
        System.out.println(coinnames.keySet().size());
        System.out.println(coinnames);
        
        for (Integer k : coinnames.keySet()) {
            String s = coinnames.get(k);
            System.out.println(s);
        }
    }

    public String getName(int amount) {
        if (coinnames.containsKey(amount)) {
            return coinnames.get(amount);
        } else {
            return "NOT FOUND";
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int amount = in.nextInt();
        Coin coin = new Coin();
        String name = coin.getName(amount);
        System.out.println(name);
    }

}

本文到此结束啦!
明天继续总结6. 设计原则, 顺手贴下写这篇博客时的歌曲的链接
现在开始(本兮)
听歌能愉悦心情, 也能使人充满力量! Fighting on!
现在时间:
2017/07/15
23:15:00

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,573评论 18 399
  • title: java集合框架学习总结 tags:集合框架 categories:总结 date: 2017-03...
    行径行阅读 1,674评论 0 2
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,485评论 0 3
  • 多年风雨结伴归,同窗同乡友一场。 吾逐学路君为家,儿时玩伴今朝郎。 前程似锦神难挡,扬名立万德四方。 花好月圆红烛...
    孤独的北风阅读 222评论 1 2
  • 晚上,朋友的一句话勾起了我想回家的欲望。她说:“爹走了,咋高兴”!简单的六个字却包含了深切的思亲之痛。此刻的我想...
    程水丽阅读 227评论 2 1