java基础知识学习日记6

学习内容:java程序的参数,程序运行过程中接收用户输入,SystemRuntime类的相关用法,ObjectObjects类,使用StringStringBufferStringBuilder类,Math类进行数学计算,BigDecimal保存精确浮点数,使用Random类生成各种伪随机数,DateCalendar的用法及之间的联系,java8新增的日期、时间API的功能和用法,创建正则表达式,使用正则表达式以及程序国际化的思路

学习笔记:

1Object类的clone()方法虽然简单易用,但它只是一种浅克隆----它只是克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆。

2、两个Random对象的种子相同,而且方法的调用顺序也相同,它们就会产生相同的数字序列,也就是说,Random产生的数字并不是真正随机的,而是一种伪随机。为了避免两个Random对象产生相同的数字序列,通常推荐使用当前时间作为Random对象的种子。

3、创建BigDecimal对象时,不要使用浮点数作为构造器的参数,否则同样会发生精度丢失的问题。

 

学习内容:集合的概念和作用,使用Lambda表达式遍历集合,Collection集合的常规用法,使用Predicate操作集合,使用Iteratorforeach遍历集合,SetLIstDequeMap的用法,固定长度的List集合,Hash算法对性能的影响,Collections工具类的用法,java的集合体系

学习笔记:

1、集合类和数组不一样数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象。

2、对于Set List、 Queue Map四中集合,最常用的是HashSet  LinkedHashSet TreeSet EnumSet ArrayList LinkedList ArrayDeque HashMap LinkedHashMap TreeMap EnumMap等实现类。

3、当使用Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只用通过Iteratorremove()方法删除上一次next()方法返回的集合元素才可以,否则将会引发异常。

4、独立使用Stream的步骤如下:使用Stream或者XXXStreambuilder()类方法创建该Stream对应的Builder重复使用Builderadd()方法向该流中添加多个元素。调用Builderbuild()方法获取对应的Stream调用Stream的聚集方法。

5HashSet具有以下特点。不能保证元素的排列顺序,顺序可能和添加顺序不同,顺序也有可能发生改变。②HashSet不是同步的,如果多个线程同时访问一个HashSet,则必须通过代码保证其同步。集合元素值可以使null.

6HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且对象的HashCode()方法返回值也相等。

7、如果需要把某个类的对象保存到HashSet集合中,重写这个类的equals()方法和hashCode()方法时,应该尽量保证两个对象通过equals()方法比较返回true时,它们的hashCode()方法返回值也相等。

8hashCode()方法的基本规则:在程序运行过程中,同一个对象多次调用hashCode()方法应该返回相同的值。当两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法应返回相同的值。对象中用作equals()方法比较标准的实例变量,都应该用于计算hashCode值。hashCode值可以乘以任意一个质数后再相加。

9、虽然LinkedHashSet使用了链表记录集合元素的添加顺序,但它依然是HashSet,因此依然不允许集合元素重复。

10、向TreeSet集合中添加元素时,只有第一个元素无需实现Comparable接口,后面添加的所有元素都必须实现Comparable接口。

11EnumSet在内部以位向量的形式存储,这种存储形式非常的紧凑、高效,因此EnumSet对象占用内存很小,而且运行效率很好。

12、当试图复制一个Collection集合里的元素来创建EnumSet集合时,必须保证Collection集合里的所有元素都是同一个枚举类的枚举值。

13List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。

14、当调用Listset方法;来改变指定索引处的元素时,指定的索引必须是List集合的有效索引。set方法不会概念List集合的长度。

15ArrayListVector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了集合,则程序必须手动保证集合的同步性;但Vector是线程安全的,无须程序保证该集合的同步性。

16ArrayListArrayDeque两个集合类的实现机制基本类似,它们的底层都采用一个动态的、可分配的Object[]数组来储存元素,当集合元素超出了该数组容量时,系统会在底层重新分配一个Object[]数组来储存集合元素。

17、对于所有的内部基于数组的集合实现,使用随机访问的性能比使用Iterator迭代访问的性能要好,因为随机访问会被映射成对数组元素的访问。

18、关于List集合的建议。如果需要遍历List集合元素,应该使用随机访问方法来遍历集合元素,这样性能更好,对于LinkedList应该采用Iterator迭代器来遍历集合元素。如果需要经常执行插入、删除操作来改变包含大量数据的List集合的大小,可使用LinkedList集合。如果有多个线程同时访问List集合中的元素,开发者可考虑使用Collections将集合包装成线程安全的集合。

19、如果需要使用WeakHashMapkey来保留对象的弱引用,则不要让该key所引用的对象具有任何强引用,否则将失去使用WeakHashMap的意义。

20EnumMap具有如下特征:①EnumMap在内部以数组形式保存,所以这种实现方式非常紧凑、高效。②EnumMap根据key的自然顺序来维护k-v对的顺序。③EnumMap不允许使用null作为key,但允许使用null作为value。如果试图使用null作为key时将会抛出异常。如果只是检查是否包含nullkey,或者删除nullkey,都不会抛出异常。

21Collections类中提供了多个synchronizedXXX()方法,该方法可以将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。

你可能感兴趣的:(java基础知识学习日记6)