Java 笔试题---Java与编程模式--7月6日

一. List 与 Set 区别
 
  1.List的功能方法

  List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。

   ArrayList: 由数组实现的List。它允许对元素进行 快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来 由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。

  LinkedList: 对顺序访问进行了优化,向List中间 插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

  2.Set的功能方法

  Set(interface): 存入Set的每个元素必须是 唯一的,因为Set 不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

  HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。

  TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。

  LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

  HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。

 
.final static 区别
 
    final 关键字
     1.--final 类不能有子类
     2.--final 方法不能被覆盖
     3.--final 变量是一个常量
 
   static 关键字
      1.-- 修饰变量--静态变量(可以用类名直接点取)
      2.-- 修饰方法--静态方法
             -- static 方法中可以使用static成员
             --static 方法中不能直接使用非静态成员
             --static 方法中不能用this
             --static 方法中不能被覆盖
      3.-- 初始化块---静态块(类装载时执行一次)
      4.--static 关键字声明的属性或方法与类相关,当成一个胜于此类的所有独特对象整体,因此,static成员通常叫做类成员
 
三.面向接口编程的好处?
 
  接口(Interface)---方法定义和常量值集合
    1.一个“公有接口”是客户代码和实现此接口的类之间的合约
    2.一个Java接口是包含没有实现的方法合约
    3.许多不相关的类可以实现同一个接口
    4.一个类可以实现许多不相关的接口
   用处:
    1.定义不相关类的共同行为,不需要这些类之间的层次关系
    2.可以指明多个类需要实现的方法
    3.可以了解对象的编程界面,而不需要了解对象对应的类
    4.通过一个接口列表可以实现多重继承
 
四. 什么是单例模式,在什么情况下使用?
 
  单例模式:在单例模式中,对活动的单例只有一个实例。对单例类的所有实例化得到的都是相同的一个实例。这个模式也提供一个全局的接口来访问这个类的实例。
 
 
public class Singleton {

    //Fields
    private static Singleton instance;
    //Standard default Constructor
    protected Singleton(){};
    //Static method for creating the single instance of the Constructor
    public static Singleton Instance(){
        //initialize if not already done
        if(instance == null)
        instance = new Singleton();
        //return the initialized instance of the Singleton Class 
        return instance;
    }
}

public class Client {

    public static void main(String []args){
      Singleton s1 = Singleton.Instance();
      Singleton s2 = Singleton.Instance();
      if(s1 == s2)
      System.out.println("The same instance");
    }
}
单例模式的优点:
    1。 实例控制:单例模式防止其它对象对自己的实例化,确保所有的对象都访问一个实例。
    2。 伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。
五.什么是策略模式,在什么情况下使用?
 
策略模式(Strategy Pattern)中体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。策略模式的定义如下: 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性。
 
 
 

你可能感兴趣的:(java,职场,笔试题,休闲)