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