关闭

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

标签: Java对象容器集合网易云课堂
295人阅读 评论(0) 收藏 举报
分类:

个人为了复习一下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

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13337次
    • 积分:675
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:9篇
    • 译文:0篇
    • 评论:10条
    个人说明
    个人很喜欢的一句话, (摘自网络):
    时光荏苒,祝愿不要忘记曾经的初心

    本人现在是一名大二软件工程专业的学生, 每月会坚持更新, 本博客会总结, 整理, 分享个人学习的相关技术知识, 用来记录自己不断进步的历程, 当然内容会以Java为主线.

    虽然是技术博客, 但毕竟是人, 也有自己的情感, 所以, 有时也会分享一些有用的学习资源和一些学习经验和方法, 同时也会写一些其它方面上自己的感受和想法!

    或许我的博客不是写得非常好, 但每一篇文章绝对会用心写! 如果, 你发现有不足或者错误之处, 非常欢迎指出, 当然也欢迎各位小伙伴们来交流技术和学习感受.

    每天进步一点点, 共勉!
    博客专栏
    最新评论