美文网首页
java -基础

java -基础

作者: 白璞1024 | 来源:发表于2019-08-16 16:59 被阅读0次

[TOC]

1、基础知识

  1. StringBuilder String StringBuffer的区别,String为啥不可变

    1. 可变性
      1. String 源码实现的时候使用了final修饰 private final char value[]
      2. String buffer StringBuilder 都是AbstractStringBuilder类,这个类没有final修饰
    2. 安全性
      1. String对象不可变,常量,安全
      2. StringBuilder对方法加了同步锁,对调用方法加了同步锁,安全
      3. 没有加同步锁,并不安全
    3. 性能
      1. 每次对StringBuilder本身操作,不生成新的对象改变对象引用,所以Builder比Buffer仅仅多获得了10% 的性能提升,但是却有多线程不安全的风险
    4. 结论:
      1. 数据少的时候直接String
      2. 数据多的时候,单线程,就是Stringbuilder
      3. 多线程,StringBuilder
  2. == 与equal

    1. equal:没有覆盖equal()方法的,等价于==比较这两个对象
    2. 覆盖了equals方法的时候,一般我们都覆盖这个方法来比较两个对象内容相等
    3. String中的equal重写过,Object中的方法比较的是内存地址,String比较的是两个值
  3. final

    1. final变量:基本数据类型,初始化之后不能修改,引用类的变量,地址值就不能修改
    2. final类:不能被继承,所有的方法都默认变成final方法
    3. final方法:方法锁定,防止任何继承类修改它,效率,private都隐式的将方法指定成final
  4. finally不会被执行的情况

    1. 在finally语句块中发生了异常
    2. 前面的代码中使用了System.exit();
    3. 线程死亡
    4. CPU结束
  5. 接口和抽象类的区别

    1. 接口默认方法都是pinlic 所有的方法在接口中不能实现,java8之后可以有默认实现抽象类可以有飞抽象的方法

    2. 接口中的实例变量默认都是final类型的,抽象类不一定

    3. 一个类可以实现多个接口,但是最多只能实现一个抽象类

    4. 一个类实现接口的话,要实现接口所有的接口,抽象类不一定

    5. 接口不能用new实例化,但是可以申明。

      1. 抽象是类的抽象,一种模板设计
      2. 接口是行为抽象,一种行为规范

      jdk8中,接口定义静态方法,接口名调用。

      如果同时实现了两个接口,接口中一定要重写,不然会报错。

2. Java集合框架

  1. Arraylist 的LinkedList
    1. 是否保证线程安全:ArrayList LinkedList 不同步的,不保证线程安全
    2. 数据结果:Arraylist Object数组,LinkedList 双向链表数据结构,1.6之前是循环链表,1.7取消了循环
    3. 插入和删除元素:ArrayList 数组,增删时间复杂度受元素位置的影响。LinkedList受时间复杂度都是O(1)
    4. ArrayList支持搞笑随机元素访问,LinkedList不支持
    5. 内存占用:list列表结尾会预留一定的容量空间,LinkedList每一个元素消耗都多与ArrayList
  2. ArrayList与Vector区别
    1. Vector是同步的,两个线程安全的访问衣蛾Vector对象,但是一个线程访问的话,代码时间可能会比较长。
  3. HashMap
    1. 1.8之前:数组和链表结合在一起 形成链表散列
    2. 1.8之后:解决哈希冲突的时候,当链表长度大于阈值,就会将链表转化为红黑树,减少搜索时间。
  4. HashMap HashTable
    1. x线程安全 ,Map是不安全的,table是安全的。table所有的方法都经过synchronized修饰。ConcurrentHashMap线程也是安全的,推荐用这个 ,如果有需求的话
    2. 效率,因为线程安全的问题,HashMap比HashTable效率高。HashTable被淘汰了不要用
    3. 初始大小,hashMap初始大小默认是11,每次扩充,容量就是2n+1
  5. HashMap /HashSet
    1. HashSet的底层是HashMap实现的
    2. HashSet 的值存放于HashMap的key中,所以不能重复
  6. ConcurrenthashMap Hashtable
    1. 数据结构:
      1. ConcurtenthashMap 1.7以前分段数组+链表 实现,1.8数据结构和hashMap1,8一样,数组+红黑
      2. table he 1.8以前的hashMap的底层数据结构类似,都是采用数组+链表的形式。数组是HashMap的主体,链表是为了解决冲突存在的
    2. 线程安全:
      1. 1.7之前ConcurrentHashMap对整个数组进行了分割分段,没一把锁只锁容器的一部分,多线程访问不同的容器,就不会竞争,提高效率
      2. 1.8之后直接采用Node+链表+红黑树的数据结构实现。
      3. Hashtable 使用synchronized保证线程安全,功效底下。竞争可能会越来越大

相关文章

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

  • Java基础:动态代理

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,...

  • Java 集合类原理

    Java基础——HashMap源码分析 Java基础——HashSet源码分析 Java基础——HashTable...

  • Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加...

  • java基础(一)-String、StringBuffer、St

    java基础-String、StringBuffer、StringBuilder java基础小白,初学java,...

网友评论

      本文标题:java -基础

      本文链接:https://www.haomeiwen.com/subject/lhuqsctx.html