java基础笔记-日常问题总结不定期更新

jdk包含jre ,jre包含jvm

跨平台原理:不同操作系统都提供了jvm

单字节范围-128  ~127

 

& 和&& 的区别:

 & 除了按位与,也可以实现逻辑与,但是没有短路特性

 

Java中String字符串的最大长度?

  Java中的字符串String最大长度,编译期如果是javac编译就是65534。如果绕过javac编译的限制,其最大长度可以达到u2类型变达的最大值65535。

  常量池第0项保留.

运行期是4G.

Java用Scanner类获得单个字符

char c= sc.next().charAt(0);

 

 

通常使用String类作为Map的key:

String类是不可改变类,
HashMap 是根据key的hashcode 确定value的存储位置
在String类的源码,创建完String类的对象,会立马计算该对象的hashcode并保存在Hash字段.

 


JAVA 7和JAVA8 HashMap 的不同:

java7:链表数组,插入在链表前面
java8:链表长度达到一定值,转为红黑树,插入到链表尾部.

 

 @Test
    public void test3() {
        HashSet set = new HashSet();
        Person p1 = new Person("AA", 1, 2.0);
        Person p2 = new Person("BB", 2, 3.0);
        set.add(p1);
        set.add(p2);
        p1.setName("CC");
        set.remove(p1); // 能否删除 ?? //不能,此时重新计算hashcode,重新散列到数组,找不到第一次散列的位置
        System.out.println(set);
        set.add(new Person("CC", 1, 2.0)); // 能否添加 //可以添加,在新散列的位置找不到该内容
        System.out.println(set);
        set.add(new Person("AA", 1, 2.0)); // 能否添加 //可以添加,在原来散列的位置 进行hashcode 和equals时不相等
        System.out.println(set);
    }

 

反转链表:

class MyLinkList{
    class Node{
        int value;
        Node next;
        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }
    Node frist;

    public void add(int value){
        Node node = new Node(value, null);

        if(frist==null){
            frist =node;
        }else {
            Node tmp =frist;
            while (tmp.next!=null){
                tmp=tmp.next;
            }
            tmp.next=node;
        }
    }

    public  Node reverse(){
        Node next=new Node(frist.value,null);
        Node tmp =frist;
        while ((tmp=tmp.next)!=null){
            next=new Node(tmp.value,next);
        }
        System.out.println("123");
        return next;
    }

}

 volatile 与synchronized 的区别:

volatile 易变的,是线程同步的轻量级实现,变量在多个线程的同步性
线程1访问变量,会拷贝一份到缓存,然后修改
线程2访问同一个变量,访问的值是内存的数据,出现数据不一致
使用volatile 修饰后,CPU 会不断扫描该变量在缓存的值有没有改变,如果改变,就会刷会内存
保证变量的一致性

  即当某一个线程修改了变量,其它线程立即可见.
synchronized 多个线程间资源的同步.

posted @ 2021-05-07 19:25  wangheng1409  阅读(33)  评论(0编辑  收藏  举报