新生代:刚创建都对象都存在这里,这里的垃圾回收机制频率很快。位于堆空间。
老年代:超过15次的垃圾回收都没有回收,就进入到老年代,老年代的垃圾回收机制频率比较慢。位于堆空间。
永久代:不进行垃圾回收的堆内存区域,比如类,方法,常量,静态修饰的各种成员都放在这里。以前jdk1.8之前位于非堆空间。现在是位于堆空间,换了个名字叫元空间。
String字符串拼接能避免尽量避免。不可避免的话就用StringBuffer(线程安全)或者StringBuilder(线程不安全)中的方法拼接。
可以把类集称为Java对数据结构的实现,类集的概念是在jdk1.2之后才正式引入的。在java.util包中
List可以存储重复元素,Set不可以存储重复元素。
ArrayList线程不安全,Vector线程安全,都采用动态数组扩容的方法。
LinkedList实现了一些数据结构,但是使用比较少。
Iterator是迭代器,可以迭代Collection下所有集合,ListIterator只能用于迭代List集合。
foreach循环即增强for循环。
HashSet散列存放值。是用HashMap进行存储的。
快速失败指的是在遍历集合时,如果有外部操作改变了集合内容,就会抛出异常,快速而干净的失败;安全失败指的是失败时不会出错,安全失败迭代时是将集合复制了一份进行迭代,所以对集合的操作不会导致抛出异常。
TreeSet的有序指的是根据数据的自然顺序进行排列。如果添加元素的顺序是BACD,则输出元素的顺序是ABCD,也就是说元素是有序存储的。仅限于编码表中已有的编码,如果是自己创建的类型是不会自动进行排序的,如果不指定排序的方式的话而是会抛出ClassCastException异常的。必须要对自定义的类型实现Comparable接口也就是自定义排序方式才能进行比较。也就是要重写compareTo方法,返回正数代表当前类型大,0代表相等,负数代表小。
HashMap的存储方式是根据对象的哈希值取余哈希表的长度,然后将其存储在相应的下标处。当某一个下标处的数据存储到8个时在这个下标原先链表会转化成红黑树,减少到6个时会转化为链表。散列因子为0.75,意思是当哈希表中有75%的下标都存储数据了,会进行扩容,扩容后长度为原长度的2倍。
在通过HashMap的Key找Value时,不仅要比较哈希值还要调用equals方法比较两个对象是否相同。