`
jianchen
  • 浏览: 342897 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java基础复习(10)--链表实现,单例模式

阅读更多

类的构造器也可以实现重载

类的继承体系结构

自动的拆装箱
写程序要考虑向后的兼容性(新特性不能滥用)

链表的实现 (用链表实现堆栈或队列都很方便)
查看jdk LinkedList源码(该实现为双向循环链表)万老师讲的是单向非循环链表:
该类内部使用了一个静态内部类Entry ,相当与今晚上课时讲的Node类

 private static class Entry<E> {
    E element;
    Entry<E> next;
    Entry<E> previous;

    Entry(E element, Entry<E> next, Entry<E> previous) {
        this.element = element;
        this.next = next;
        this.previous = previous;
    }
  }
 



也使用了头结点:

private transient Entry<E> header = new Entry<E>(null, null, null);
    private transient int size = 0;

    /**
     * Constructs an empty list.
     */
    public LinkedList() {
        header.next = header.previous = header;
    }
 

该实现是循环链表 ,从以下代码可知:

 

 public E getLast()  {
    if (size==0)
        throw new NoSuchElementException();

    return header.previous.element;//返回头结点前面的元素即尾节点
    }
 



问题一:如何判断一个链表上存在环?
方法1:
用两个临时变量,步伐不一致,进行遍历列表,如果存在环,则则两个变量总会在某一时刻指向同一节点。
问题二:如何找到环的起点。
有点烦,用数学可以推出来,满足一定的关系。也是相差n圈的问题。

快速排序法很重要啊。

static关键字
static关键字用来修饰变量,方法和内部类,称这些变量,方法和内部类为静态变量,静态方法和静态内部类

static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”

如果访问控制权限允许,可不必创建该类对象而直接使用类名加“.”调用

static不可用于修饰构造器

设计模式:
单例设计模式
1,将构造器设为私有,向外提供一个获取单一实例的借口。
运用double check 技术,在多线程环境下保证生成唯一的实例

 

private Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
    synchronized(Singleton.class) {  
                if (instance == null) {  
                    instance = new Singleton();  
                }  
      }
}
    return instance;
}
}
 


2,静态初始化实例,同时将构造器设为私有,提供返回该实例的借口。
public static Singleton instance = new Singleton();
看到以下写法,不知静态内部类的用意何在?

public class Singleton {  
    static class SingletonHolder {  
        static Singleton instance = new Singleton();  
    }  
       
     public static Singleton getInstance(){  
         return SingletonHolder.instance;  
     }  
 }  
 

 

分享到:
评论

相关推荐

    【Java面试资料】-Java面试准备指南

    这份【Java面试资料】-Java面试准备指南包含了丰富的Java知识,旨在帮助你全面、系统地复习和准备Java面试。以下是一些关键的知识点: 1. **Java基础** - 数据类型:理解基本数据类型(如int、double)和引用数据...

    剑指offer--java版1--10源码及解析总结.zip

    《剑指Offer——Java版1-10源码及解析总结》是一份针对《剑指Offer》这本书中前10个编程题目的Java实现及解析的资料合集。《剑指Offer》是许多程序员面试必备的参考书,它涵盖了大量经典的算法和数据结构问题,旨在...

    各个公司的java笔试题---book

    6. **设计模式**:23种经典设计模式是解决问题的通用解决方案,例如单例模式、工厂模式、观察者模式、装饰器模式等。设计模式的理解和应用能体现开发者的思维层次。 7. **JVM**:Java虚拟机的内存模型、垃圾回收...

    【Java面试资料】-校招Java面试题集(全)

    - **设计模式**:熟悉常见的设计模式,如单例、工厂、装饰器、代理、观察者等,并能在实际项目中应用。 3. **Java面试常问问题** - **JVM相关**:了解JVM内存模型,理解堆、栈、方法区等区域的划分,以及垃圾回收...

    达内javaPPT课件+java面试基础复习

    "达内javaPPT课件+java面试基础复习" 提供了一个全面学习和准备Java面试的资源包。这个资料集主要关注Java的基础知识,对于求职者或者希望提升Java技能的人来说,是一个非常宝贵的学习工具。 首先,我们来探讨Java...

    大数据面试复习----常问问题分析.docx

    17. **设计模式**:设计模式是解决常见软件设计问题的模板,如单例模式、工厂模式、观察者模式等,它们是经验的总结,有助于提高代码的可读性和可维护性。 18. **数据结构和算法**:数据结构如数组、链表、树、图等...

    【Java面试资料】-蚂蚁金服面试题总结

    8. **设计模式**:面试常问到的设计模式有单例、工厂、观察者、装饰器、适配器、代理等。理解设计模式并能灵活运用,可以展现出良好的编程思维。 9. **JVM内存模型**:理解堆、栈、方法区、本地方法栈等内存区域,...

    【Java面试资料】-(机构内训资料)深圳-商汤科技-Java高级

    同时,可能会涵盖工厂模式、单例模式、观察者模式等常见设计模式的应用。 3. **集合框架**:包括ArrayList、LinkedList、HashSet、HashMap等容器的特性和使用场景,以及List、Set、Map接口的理解。还会涉及集合的...

    Java期末复习资料

    对于复杂问题,可能涉及设计模式,如工厂模式、单例模式等。 4. **程序题**:编程题要求学生根据题目描述编写Java代码,这不仅测试语法知识,更注重解决问题的能力。常见的编程题目可能包括排序算法(冒泡、选择、...

    java面试经典题-精华版

    14. **算法与数据结构**:虽然Java面试更侧重于实际应用,但基础的算法知识(排序、搜索、图论等)和数据结构(链表、栈、队列、树等)仍然是评估开发者能力的重要方面。 15. **最新技术趋势**:随着技术的发展,...

    【Java面试资料】-(机构内训资料)深圳-OPPO-Java高级

    这份资料旨在帮助面试者系统性地复习和提升Java技能,涵盖了从基础到高级的全面内容。对于想要在Java领域深耕或准备面试的开发者来说,这些都是不容忽视的知识点。通过深入学习和实践,可以提高个人竞争力,更好地...

    【Java面试资料】-(机构内训资料)南京-软通动力-Java中级

    7. **设计模式**:熟悉常见的设计模式,如单例、工厂、装饰器、观察者、代理、适配器、建造者等,并能在实际开发中应用。 8. **JVM内存模型**:理解堆内存、栈内存、方法区、本地方法栈的划分,以及垃圾回收机制...

    java期末复习题(共三份)

    - 设计模式:常见的设计模式,如单例、工厂、装饰器、观察者等模式的应用。 - 枚举与接口:枚举类如何实现接口,以及枚举的特殊用法。 - Java反射:Class类的使用,动态调用方法,修改属性值等。 3. **JAVA.doc*...

    java学习笔记之大鹏JAVA终级总结

    Java学习笔记之大鹏JAVA终级总结,是针对Java编程语言深入学习和面试准备的一份综合资料...通过这份大鹏JAVA终级总结,初学者可以系统地学习和复习Java知识,提高面试技巧,为成为一名合格的Java开发者打下坚实的基础。

    JAVA-programming-problem.zip_Java编程题

    总的来说,"程序员面试之葵花宝典之JAVA编程题.doc"这份文档会是一个全面复习和提升Java编程技能的宝贵资源,涵盖了从基础到高级的各个层面,对于准备面试或自我提升的程序员来说非常有价值。通过深入理解和实践这些...

    java-lam-interview-questions-master.zip

    13. **算法与数据结构**:虽然不是Java语言本身的特性,但面试中常考察排序算法(冒泡、选择、插入、快速、归并等)、查找算法(二分查找、哈希查找等)以及链表、树、图等数据结构的理解和实现。 14. **Java 8及...

    2020最新Java企业面试真题汇总-1000多份 解压密码2020interview.zip

    12. **算法和数据结构**:虽然Java面试中算法题相对较少,但基础的数据结构(如链表、队列、栈、树等)和排序、查找算法的了解是必不可少的。 13. **微服务**:随着云计算的发展,微服务架构成为热门话题,理解其...

    疯狂Java面试题

    这份资料集涵盖了广泛的Java编程和相关技术的知识点,旨在帮助求职者准备Java开发岗位的面试,同时也适用于自我提升和复习巩固。下面,我们将深入探讨其中可能涉及的重要Java知识点。 1. **Java基础** - 数据类型...

    Java编程基础(经典网帖合集)

    - **数据结构与算法**:了解常见数据结构(如链表、树、图)及其在Java中的实现,熟悉排序和搜索算法。 - **设计模式**:学习常见的设计模式,如单例、工厂、观察者等,提升代码质量和可维护性。 通过深入学习...

Global site tag (gtag.js) - Google Analytics