技术的出现与优化


正如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();
    }

所以流的概念的出现让我不得不感慨先人的智慧。

用户更新信息时,虚拟机在运行完这个方法运行写入语句,用户信息便得以更新,再下次运行时将信息读入,即可完成信息的存档

之后的知识框架亦是很精彩的一部分,技术的更新与优化不会停歇。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值