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

个人为了复习一下Java基础, 在网易云课堂上报了翁恺老师的Java语言程序设计进阶篇的课程, 主要看了其中的3. 对象容器, 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);
        }
    }
}

对象数组

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

集合容器(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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值