java易疏忽知识点

Posted 飞机耳朵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java易疏忽知识点相关的知识,希望对你有一定的参考价值。

01
基本数据类型
------------
1.byte
bit
-128 ~ 127
1字节 = 8bit
-----------------
|1| | | | | | | |
-----------------
负数存储形式 :补码.
正数 : 自身

2^0
1 :0000 0001
2 :0000 0010
3 :0000 0011
-1 :0000 0001 -> 1111 1110 -> 1111 1111
-2 :0000 0001 -> 1111 1110 -> 1111 1110

-128:1000 0000

 

字符集:gbk gb2312 utf8 iso8859-1 ascii unicode big5


ascii :美国国家标准机构。对应的是108按键。
gb2312 :简体中文,一个中文2个byte,英文还是一个byte
utf-8 :国际化统一编码, 中文用3byte,英文还是byte
unicode :jvm使用的字符编码,每个字符占2byte,前面有个两个字节的头(-2,-1)


char c = 12 ;
c = ‘a‘ ;
c = ‘\u‘
0-F : 1111 FF

 

集合
------------------
数组 :检索快,定长。
引用。
List:
判断是否包含特定元素只判断equals方法,和对象地址以及hashcode没有关系。
  1.1)ArrayList
  数据量 操作 耗时
  100,000 写 860ms
  100,000 读 8,621ns
  内部封装的是数组,有容量,capacity。
  数组在内存中地址是连续的,下标是索引,检索时不需要逐个比对,
  可以通过计算地址直接定位到指定元素。

1.2)LinkedList
  数据量 操作 耗时
  100,000 写 10ms
  100,000 读 1ms
  链表内部通过引用实现,内部类是Node{E e ; Node pre , Node next } ;
  使用托盘引用的方式实现数据串联。优势是写操作快。查询较慢。


Map :
  key-value,key具有唯一性。

  1.1)hashMap
    散列。
    数组 + 链表内部实现。
  //托盘节点。
    Node implements Map.Entry<K,V> {
    int hash ;
    K k ;
    V v ;
    Node<K,V> next ;
    }
    map.put(...){
    ...
    putVal(hash(key), key, value, false, true);
    }

    //计算新hash。
    //新key采用高16和低16做异或运算。******************************hash内部算法
    //采用移位运算的目的是为了让更多的特征之参与计算。
    //异或计算的目的是为了让数据更加分散。
    public int hash(key){
    int h ;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

    //hashmap中判断key是否相同,(p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k))))

    //1.如果新hash不同,则key一定不同,如果key相同,还要看是否同一对象,如果是同一个key,key相同,否则再看equals()
    if(newhash1 != newhash){
    不同
    }
    else{
    if(key1 == key2){
    相同
    }
    else{
    key1.equals(k2) ;
    }
    }

1.2)TreeMap
二叉树结构,使用对比.

  Set :
    不重复。
    Hashset == HashMap.
    hashset内部通过hashmap实现,value使用垃圾值填充。只用了key的部分。

     TreeSet:内部使用的是TreeMap实现。

线程安全的集合
---------------
    Vector 等价于list.
    HashTable等价于hashMap

    集合工具类
    ----------------
    //线程安全化集合
    map = Collections.synchronizeMap(m) ;

设计模式
----------------

针对特定场景,给出的专家级的解决方案。
1.singleton
单例
某个类有且只有一个实例.
构造私有
静态指向自身的引用
方法。
  1.1)饿汉
  public class Garbage {

  private static Garbage instance = new Garbage() ;

  private Garbage(){
  }

  public synchronized static Garbage getInstance(){
  return instance ;
  }
  }
1.2)
  package com.oldboy.java.gof;
  /**
  * 垃圾箱
  */
  public class Garbage {

  private static Garbage instance = null ;

  private Garbage(){
  }

/**
* 粒度 : 粗
* @return
*/
  public static Garbage getInstance(){
  if(instance != null){
  return instance ;
  }
  synchronized (Garbage.class){
  if(instance == null){
  instance = new Garbage();
  }
  }
  return instance ;
  }
  }

2.factory
工厂
2.1)非静态工厂
/**
* 非静态工厂模式
*/
  public class TVFactory1 {
  public TVSet productTVSet(){
  TVSet tv1 = new TVSet();
  tv1.setBrand("熊猫");
  tv1.setSize(1000);
  tv1.setResolver(2000);
  return tv1 ;
  }
  }
2.2)静态工厂
/**
* 静态工厂模式
*/
  public class TVFactory2 {
  /**
  *
  */
  public static TVSet productTVSet(){
  TVSet tv1 = new TVSet();
  tv1.setBrand("熊猫");
  tv1.setSize(1000);
  tv1.setResolver(2000);
  return tv1 ;
  }
  }
3.builder
构建器模式。

  public static class TVSetBuilder{

  TVSet t = new TVSet();
  public TVSetBuilder setBrand(String brand){
  t.setBrand(brand);
  return this ;
  }
  public TVSetBuilder setSize(int size){
  t.setSize(size);
  return this ;
  }
  public TVSetBuilder setResovler(int resovler){
  t.setResolver(resovler);
  return this ;
  }

  public TVSet build(){
  return t ;
  }

4.decorator
装饰模式
锦上添花。
  class A{
  }

  class WrappedA extends A{
  private A a ;
  public WrappedA(A a){
  this.a = a ;
  }


  public void aa(){
  ..
  a.aa();
  ...
  return ;
  }
  }
5.pooling
池化模式

6.prototype
原型模式

7.适配器
预实现。
  public abstract class WindowAdapter
  implements WindowListener, WindowStateListener, WindowFocusListener
  {
  public void windowOpened(WindowEvent e) {}
  public void windowClosing(WindowEvent e) {}

  ...
  }


FileIO
-----------------
字节流
字符流

 

pojo
------------------
  plain old java object,普通古老的java对象。
  符合javabean的设计规范,空构造,私有属性,共有的getter/setter.

==和equals区别
------------------
  1.==比较的是内存地址,即是否是同一对象。
  2.equals方法
  比较两个对象的内容是否相同,默认实现比较就是内存地址。该方法需要重写,按照自己的需求进行逻辑判断。






















































































































































































































以上是关于java易疏忽知识点的主要内容,如果未能解决你的问题,请参考以下文章

15个易遗忘的java知识点

java并发编程应用易忘知识点java中的锁

Java基础知识回顾

java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点

超详细的Java面试题总结之Java基本知识

Java 基础知识的一些易错点