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易疏忽知识点的主要内容,如果未能解决你的问题,请参考以下文章