笔记2

:问题:

抽象:Java支持创建只有接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。

抽象和封装的不同点:抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。

 

Iterator和ListIterator的区别是什么?

Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。

Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。

ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

 

LinkedHashSet:改动较少时,频繁遍历时使用,它的顺序是添加进入的顺序,按添加顺序遍历。(基于链表的)

LinkedHashMap:是hashMap的子类,可以按插入的顺序遍历。(基于链表的),也可以按访问的顺序。

 

Array和ArrayList的不同点:数组,列表,静态,动态,任意类型,对象类型。

ArrayList和LinkedList都实现了List接口,不同点有?

ArrayList是基于动态数组的,LinkedList是基于链表的;因此ArrayList的随机读写性能大于LinkedList,而LinkedList的add(指定位置)的操作性能大于ArrayList,因为ArrayList需移动数据。若果是add到尾端,还是ArrayList效率高(不考虑扩容)。但是LinkedList的remove时除了头部元素的删除性能较好,中部的删除性能不如ArrayList,因为需随机查。

RandomAccess接口是一个标志接口,本身未提供方法,派生于RandomAccess的对象可以认为是快速随机访问的。如ArrayList,Vector。

 

Comparable(对象内部)和Comparator(对象外部)接口是干什么的?

Java提供了只包含一个compareTo()方法的Comparable接口。Java提供了包含compare()方法的Comparator接口。

选择Comparable接口还是Comparator?

 一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。继承于他的接口主要有Set 和List.

Collections.sort( personList )

Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:(必须再定义一个实现于Comparator的工具类完成对对象的排序等问题)

Collections.sort( personList , newPersonComparator())

1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身

2、可以使用多种排序标准,比如升序、降序等。

 

Java优先级队列(Priority Queue)?

优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头。

 

20:JVM永久代中会发生垃圾回收?

年轻代分为:Eden,S1,S2;

当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC

当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代

当永久代(Perm)满时也会引发Full GC,会导致Class、Method元信息的卸载

System.gc()被显示调用,也会发生Full GC。

Full GC:对整个堆进行整理,包括Young、Tenured和Perm。

Perm代主要保存class,method,filed等对象,这部分的空间一般不会溢出。

GC有两种类型:Scavenge GC和Full GC

一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC。

持久代是个比较神奇的概念,应该是Hotspot虚拟机里所特有的一个代。它是方法区的一部分,按常理不应该属于堆。并且在通过jvm参数设定各个区域大小的时候,可以很明显的发现持久代和堆的大小是需要分别指定的,两者不是一个整体。

java8之后 Hotspot 虚拟机从堆中彻底删除了永久代。 

—把方法区中的String和静态变量移到了堆中。 

—把其他的东西(比如类结构)放到了本地内存中,JVM会直接负责这部分的内存回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值