8、传统for和高级for有什么区别呢? 对集合进行遍历。 只能获取集合元素,但是不能对集合进行操作。 迭代器除了遍历,还可以进行remove集合中元素的动作。 如果是用ListIterator,还可以在遍历过程中进行增删改查的动作。 高级for有一个局限性,必须要有被遍历的目标。 建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义角标。 1.增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的(可以查看编译后的文件),但是增强for循环 有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。 2.ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。 3.而对于 LinkedList由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
9、Collection和Colections的区别是什么? Collection是一个接口,它是List、Set、Queue等接口的父接口。在这个接口中,定义了集合类中通用的方法。 Collections是独立出来去专门操作Collection接口下实体类的工具类。
10、面向对象和面向过程的理解 面向对象时相对面向过程而言的。比如说:人坐地铁去上班。人面向地铁这个对象,地铁拥有运输的功能,人通过地铁调用这个功能,只重结果,不重于过程。面向过程就如我们开门,锁孔对齐,门轴转动,门才开了,相对于结果,侧重于过程。 曾经跟朋友聊对面向对象,我说就像搭积木,找到需要的,一个一个往上累;她说这就是JAVA方便之处。 (1)面向过程是以函数为基础,完成各种操作,强调的是过程,例如:C语言; (2)面向对象以对象为基础,完成各种操作,强调的是对象和结果。 (3)面向对象是基于面向过程的。 面向对象的特点是: (1)是一种个符合人们思考习惯的思想 (2)把复杂的事情简单化 (3)把我们从执行者变成了指挥者 举例:老师您口渴想喝茶,如果你自己去拿杯子,放茶叶, 接水这些是面向过程的;但这时您恰好知道我是个打水小能手, 又正好我很尊敬您,一见如故、一见钟情啥的,很愿意帮您去泡茶。 您调用我帮您泡茶,使用我的拿杯子、放茶叶、接水等方法。 您由执行者上升到了指挥者,让泡茶这件事更简单化。
11线程之间通信的理解 其实,Java提供了3个非常重要的方法来巧妙地解决线程间的通信问题。 这3个方法分别是:wait()、notify()和notifyAll()。 它们都是Object类的最终方法,因此每一个类都默认拥有它们。 虽然所有的类都默认拥有这3个方法,但是只有在synchronized关键字作用的范围内,并且是同一个同步问题中搭配使用这3个方法时才有实际的意义。 这些方法在Object类中声明的语法格式如下所示: final void wait() hrows InterruptedException final void notify() final void notifyAll() 调用wait()方法可以使调用该方法的线程释放共享资源的锁,然后从运行态退出,进入等待队列,直到被再次唤醒。 调用notify()方法可以唤醒等待队列中第一个等待同一共享资源的线程,并使该线程退出等待队列,进入可运行态。 调用notifyAll()方法可以使所有正在等待队列中等待同一共享资源的线程从等待状态退出,进入可运行状态,此时,优先级最高的那个线程最先执行。 显然,利用这些方法就不必再循环检测共享资源的状态,而是在需要的时候直接唤醒等待队列中的线程就可以了。这样不但节省了宝贵的CPU资源,也提高了程序的效率。 由于wait()方法在声明的时候被声明为抛出InterruptedException异常,因此,在调用wait()方法时,需要将它放入try…catch代码块中。此外,使用该方法时还需要把它放到一个同步代码段中,否则会出现如下异常: "java.lang.IllegalMonitorStateException: current thread not owner" |