读书笔记-容器深入理解

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:                                  本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!         ArrayList底层是由数组支持,而LinkedList是由双向链表实现,因此插入或删除,LinkedList比较合适,查询则用ArrayList,HashSet是查询速度最快的,LinkedHashSet保持插入次序,TreeSet基于TreeMap,生成一个总是处于排序状态的Set。



                                 本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


         ArrayList底层是由数组支持,而LinkedList是由双向链表实现,因此插入或删除,LinkedList比较合适,查询则用ArrayList,HashSet是查询速度最快的,LinkedHashSet保持插入次序,TreeSet基于TreeMap,生成一个总是处于排序状态的Set。CopyOnWriteArrayList是List的一个实现,专门用于并发编程。


        专门用于并发编程的对象还有CopyOnWriteArraySet、ConcurrentMap、ConcurrentHashMap,三者都使用了避免ConcurrentModificationException的技术。另外还有常见的HashTable、Vector和StringBuffer,也是实现类似结构,而避免不同步的现象出现。


        对象通过hashCode方法生成的散列码,数组通过散列码找到对象,比较也是以一定规则对散列码进行比较;讲到这里,一个字符串,两者指向的对象一样,则散列码一样,则两者相等,其他对象也是,所以一般如果需要标识对象的不同,需要重写hashCode方法。


        HashTable的底层实现方式与HashMap一样,不过它采用安全同步方式存储;LinkedHashMap在插入时要慢一点,因为它维护散列数据结构的同时还要维护链表。Reference主要用来维护大数据,强弱依次如下,SoftReference、WeakReference、PhantomReference,而最后一个依赖于ReferenceQueue,用来回收前做清理工作。调用System.gc就可以将一部分不需要的内存回收。WeakHashMap用来保存WeakReference,允许垃圾回收器自动清理键和值,允许清理的触发条件:不再需要此键。

Java的I/O系统,I/O端源与接收端:文件、控制台、网络链接等,方式:顺序、随机读取、缓冲、二进制、按字符、按字等。File既能代表一个特定文件,又能代表目录下一组文件。InputStream中有ByteArrayInputStream、StringBufferInputStream、FileInputStream、PipedInputStream、SequenceInputStream、FilterInputStream,几乎都对应一个OutputStream。其中比较特殊的要属倒数第三个,作为多线程中数据源。


        RandomAccessFile适用于由大小已知的记录组成的文件,可用于读也可用于写。文件读写其实就是读取文件到内存,修改,然后再写出。Java1.4引入文件回销机制,允许我们同步访问某个作为共享资源的文件。FileLock对象通过FileOutputStream的channel来获取,其中两个概念,调用trylock与lock的不同:tryLock是非阻塞式的,它设法获取锁,如果不能获得,它将直接从方法调用返回;lock则是阻塞式的,它要阻塞进程直至锁可以获得或者调用lock的线程中断,或者调用lock的通道关闭,可以使用FileLock.relesse()释放锁。


       用Zip进行多文件保存时Adler32比CRC32快一些。序列化可以将一引起实现Serializable接口的对象转换成一个字节序列,并在后期可以进行恢复,实现RMI(Remote Method Invocation),实现:创建OutputStream对象,封装在ObjectOutputStream对象中,调用writeOjbect即可将对象序列化,反向过程只需将一个InputStream封装在OjbectInputStream内,然后调用readObject(),它不仅能保存自己,而且还会追踪对象内所包含的引用,并保存它们。当然如果不希望对象的某一部分被序列化或者一个对象被还原后,某子对象需要重新创建,从而不必将该子对象序列化,这样可以实现Externalizable接口,通过writeExternal和readExternal来将处理私密信息,不被一次性反序列化掉,从而从容的显示序列化。Serializable与transient关键字共用,来关闭不想公开的数据,如密码。

       最后,我们可以通过Preferences来保存小数据,就像Android中的SharedPreference一样,通过Preferences调用userNodeForPackage(className)或systemNodeForPackage,存储基本类型和字符串,长度不超过8k,放在合适的系统资源中,且随操作操作系统的不同而不同。


       枚举类型enum用来保存一组自己定义的值,一直跟switch一起应用,enumSet和enumMap分别用来处理enum的set和map集合。

       注解:把无数据与源代码结合在一起,由编译器来测试和验证格式,存储有关程序的额外信息。注解可以提供默认值、可以限定数据类型、初始化控件,不支持继承,apt来处理注解处理工具。它提供一种结构化的,并且具有类型检查能力的新途径,从而使得程序员能够为代码加入元数据,而不会导致代码杂乱且难以阅读。


        





目录
相关文章
|
4月前
|
XML Java 数据格式
[读书笔记]Spring中的容器设计详解
[读书笔记]Spring中的容器设计详解
16 0
|
4月前
|
Java API 容器
[读书笔记]IOC容器的依赖注入详解
[读书笔记]IOC容器的依赖注入详解
41 0
|
Linux 虚拟化 云计算
《云计算架构技术与实践》读书笔记(五):Docker 容器及其调度
5.1容器典型应用场景 Docker技术的出现和迅猛发展,已成为云计算产业的新的热点。容器使用范围也由互联网厂商快速向传统企业扩展,大量传统企业开始测试和尝试部署容器云。
|
存储 容器 Java
读书笔记-容器、泛型及反射
            本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!         在Java中,对象的封装非常常见,今天我们可以聊下容器和泛型的问题,对对象进行更深入一点的研究。
778 0
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
1月前
|
Oracle 关系型数据库 数据库
|
6天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
11 0
|
15天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
13 0
|
15天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
26 0
|
15天前
|
存储 Linux Shell
centos 部署docker容器 安装 、基本使用方法(一)
centos 部署docker容器 安装 、基本使用方法(一)
27 0