zoukankan      html  css  js  c++  java
  • 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 多个线程间资源的同步.

  • 相关阅读:
    PageRequestManager 综述
    【转】浏览器集成教学 自定义浏览器
    COM(四)注册
    关于/ENTRY (EntryPoint Symbol)
    COFF文件
    【转】用系统默认浏览器打开Microsoft Web Browser控件触发的超链接
    Scroll Bar 控件
    COM(一)CoCreateInstance
    Web相关概念
    WebBrowser Control(一)禁止表单数据提示对话框
  • 原文地址:https://www.cnblogs.com/wanghzh/p/14555810.html
Copyright © 2011-2022 走看看