Java|Java基础整理(全是干货)

Java|Java基础整理(全是干货)




【Java|Java基础整理(全是干货)】
一.hashMap与hashTable与ConcurrentHashMap:
1.HashMap是继承自AbstractMap类 , 而HashTable是继承自Dictionary类 。 不过它们都同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口 。 <Dictionary类是一个已经被废弃的类>
2.Hashtable既不支持Null key也不支持Null value 。 HashMap中 , null可以作为键 , 这样的键只有一个 , 可以有一个或多个键所对应的值为null 。
3.Hashtable是线程安全的 , 它的每个方法中都加入了Synchronize方法 。 在多线程并发的环境下 , 可以直接使用Hashtable , 不需要自己为它的方法实现 同步 , HashMap不是线程安全的 , 在多线程并发的环境下 , 可能会产生死锁等问题 。 如果想要线程安全的 HashMap , 可以通过Collections类的静态方法synchronize dMap获得线程安全的HashMap 。<Map map =
Collections.synchronizedMap(new HashMap())>;
4.hashMap的数据结构:HashMap的底层主要是基于数组和链表来实现的 , 它之所以有相当快的查询速度主要是因为它是通过计算散列码来决定存储的位置 。
5.ConcurrentHashMap:底层采用分段的数组+链表实现 , 线程安全ConcurrentHashMap允许多个修改操作并发进行 , 其关键在于使用了锁分离技术 。 它使用了多个锁来控制对hash表的不同部分进行的修改 。 ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分 , 每个段其实就是一个小的Hashtable , 它们有自己的锁 。 只要多个修改操作发生在不同的段上 , 它们就可以并发进行 。
JDK1.8的实现已经摒弃了Segment的概念 , 而是直接用Node数组+链表+红黑树的数据结构来实现 , 此时锁加在key上 , 并发控制使用Synchronized和CAS来操作 , 整个看起来就像是优化过且线程安全的HashMap , 虽然在JDK1.8中还能看到Segment的数据结构 , 但是已经简化了属性 , 只是为了兼容旧版本 。
二.(String)、toString、String.valueOf的区别
1.(String):使用这种方法时 , 需要注意的是类型必须能转成String类型 。 因此最好用instanceof做个类型检查 , 以判断是否可以转换 。 instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例 ,
父类parent子类son 此时 flag= son instanceof parentflag=true 。
2.toString:String s = Object.toString()在使用时要注意 , 必须保证object不是null值 , 否则将抛出NullPointerException异常 。
3.String.valueOf:
内部实现:
public static String valueOf(Object obj){
return (obj==null) ? \"null\" : obj.toString()
;
当Object不为空时 , 调用toString()方法 , 当Object为null时 , 则返回一个字符串\"null\"!!!!
三.字节流与字符流的区别
字节流:InputStreamOutputStream程序→文件
字符流:BufferedReadBufferedWrite , 程序→缓存区→文件
字符流需要关闭字符流 , 缓存区的数据才会被写入文件 , 否则会一直堆在缓存区 。 或者可以用flush()方法 , 将数据强行写入文件 。
利用BufferedRead读取文件:
public static void main(String[
args) throws Exception {
String s= \"F:/456.txt\";
File f =new File(s);
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String temp=\"\";
while((temp=br.readLine())!=null) {
System.out.println(temp);


四.Integer
源代码:
private static class IntegerCache {//静态缓存类
static final int low = -128;
static final int high;
static final Integer cache[
;
static { //静态代码块
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =https://mparticle.uc.cn/api/