正如Java这一技术的出现是弥补了C++,C#等技术缺乏可移植性和垃圾收集的弊端,且提供了一个丰富且高质量的代码库,
所有的技术都不是凭空产生的
贯穿整个Java知识的框架,在新的技术出现之前,都是对之前技术空缺的弥补或是对现有技术冗余及不足的优化。
常量
//创建一个整型引用指向常量
int n = //常量;
如果我们需要键入或是指向一处常量,便是创建其所对应类型的引用指向其常量池的地址(这个地址在开辟时是随机的),无疑快捷干脆
若是数据量大时,且数据之间有联系,还能一个个去指向么
显然是低效且混乱的。
数组
//创建N个相关联的整型常量空间并指向其空间
int[] n = new int[N];
n[0] = //常量1;
n[1] = //常量2;
...
n[N - 1] = //常量N-1;
于是便出现了数组这一概念:
i. 存储多个数据、
ii. 空间相互关联
于是我们便可以在自己规定好大小的数组里任意存储了。
不过,我们只能存储整型的元素,并且时刻得留意着数组大小
所以我们可以在需要的时候再创建其他类型的数组,并且提前计划好其大小不就可以解决了么。
可行,但是明显太过笨拙。本身数组未用的空间便是搁置,创建太多无疑会更加浪费空间,且在实际开发中,大多数情况下数据的数量是未知的。
集合
有序集合
//创建一个可以存储任意类型元素的有序集合
List list = new ArrayList();
//创建一个存储指定类型元素的有序集合
List<type> list1 = new ArrayList<>();
List 的出现,即完成了数组所需完成的工作,亦完美的解决了其可操作性低的问题:
i. 底层是数组,可以存储任意类型的元素
ii. 初始空间为10个元素,若是即将溢出,会自动扩容之前空间的一半(10 + 5)。
iii. 不再需要通过索引存入数据,直接调用List .add()方法即可更方便的存入元素。
亦可通过泛型来限制所存入元素,以保证开发中的效率。
//数组获得常量索引
int flag = //常量;
for (int i = 0; i < n.lenth() && n[i] != flag; i++);
return i;
//List获得元素索引
list.indexOf(element);
由于索引的存在,故而在查询的时候很是方便
不过需要添加或是移除一些数据的时候,顺序结构就显得很是棘手。
//数组添加元素
int insert = in.nextInt();
for (i = 0; i < n && (a[i] < insert); i++);
int index = i;
for (i = n; i > index - 1; i--) {
a[i + 1] = a[i];
}
a[index] = insert;
//List添加元素
list.add(index,element);
尽管使用List 操作时很是方便,只不过是将排序过程封装在底层罢了,在执行时,效率还是会收到影响。
无序集合
//创建一个无序集合
Set set = new HashSet();
所以在不需要考虑元素顺序的情况下,便可以使用无序的集合来存储元素。
i. 底层为链表结构
ii. 存储位置随机,各元素自带相邻元素位置信息
由于没有了索引的约束,所以在删除,插入元素时显得格外的高效;相反,在查找的时候便显得效率低下
文件
在实际工作中,我们将各个功能组合起来,Jvm便将其各种数据存入所对应的存储区中,供我们使用
若是结束运行,数据信息便会释放
所以在第一次开发项目的时候,便深深感受到了数据丢失的可怕。
//数据读入
public static List<User> readFile() throws Exception {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("users.txt"));
List<User> list = null;
try {
list = (List<User>) ois.readObject() ;
} catch (Exception e) {
list = new ArrayList<>();
}
ois.close();
return list;
}
//数据写入
public static void writeFile(List<User> list) throws Exception {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("users.txt"));
oos.writeObject(list);
oos.close();
}
所以流的概念的出现让我不得不感慨先人的智慧。
用户更新信息时,虚拟机在运行完这个方法运行写入语句,用户信息便得以更新,再下次运行时将信息读入,即可完成信息的存档
之后的知识框架亦是很精彩的一部分,技术的更新与优化不会停歇。