牛客0718B——Arraylist 和LinkedList static修饰变量和方法

目录

Q1:currentTimeMillis是什么?

[Q2:比较Arraylist 和LinkedList的查找时间](#Q2:比较Arraylist 和LinkedList的查找时间)

3、相关对比Vector和Arraylist

底层扩容的原理:

Q4:static修饰静态代码块

修改1:

修改2:

修改3:

修改1:

修改2:

Q5:super和this

继承中的构造方法


Q1:currentTimeMillis是什么?

java中System.currentTimeMillis()返回的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数。

语句:

java 复制代码
 long t1=System.currentTimeMillis();
//执行程序
 long t2=System.currentTimeMillis()-t1;//t2就是程序执行的时间

Q2:比较Arraylist 和LinkedList的查找时间

LinkedList每次增加的时候,会new 一个Node对象来存新增加的元素,所以当数据量小的时候,这个时间并不明显,而ArrayList需要扩容,所以LinkedList的效率就会比较高,但当ArrayList不需要扩容的时候它的效率应该是比LinkedList高的,当数据量很大达到千万级别的时候,new对象的时间大于扩容的时间,那么就会出现ArrayList的效率比Linkedlist高的情况了。

3、相关对比Vector和Arraylist

Arraylist------ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。

ArrayList 类提供了很多有用的方法,添加元素到 ArrayList 可以使用 add() 方法 。 添加并遍历元素如下:

Vector------这也是List接口实现类,它和Arraylist一样,底层使用数组来实现,区别在于Vector是线程同步,效率稍低,ArrayList线程不同步,效率稍高

底层扩容的原理:

ArrayList底层数组如果满了,就扩容:创建一个新数组,长度是原数组的1.5倍,将原数组拷贝到新数组,使用新数组

Vector 底层也是数组,如果满了就就扩容:创建一个新数组,根据指定的扩容量进行创建,如果没有指定扩容量,那么新数组的长度就是旧数组的两倍,将原数组拷贝到新数组,使用新数组

Q4:static修饰静态代码块

java 复制代码
public class Test2 {
    static int x = 10;
    static { x += 5; }
    
public static void main(String[] args) {
        
System.out.println("x =" + Test2 .x);
        
    }
static
{x /= 3; }
}

求输出结果:考察的是代码执行的顺序。 第5、12行属于static修饰的静态代码块。所以A、B说法错误。 静态代码块以及静态变量自上而下的顺序依次随着类加载而执行,所以依据题目的变量初始化: x初始为10 x+5赋值x,结果为15 x/3赋值给x,结果为5

几种修改:

修改1:

java 复制代码
public class Test2 {
    int x = 10;
    static { x += 5; }

    public static void main(String[] args) {
        System.out.println("x =" + Test2 .x);
    }

{x /= 3; }
}

报错:无法执行:

java 复制代码
static { x += 5; }

java: 无法从静态上下文中引用非静态 变量 x

修改2:

java 复制代码
public class Test2 {
    int x = 10;
     { x += 5; }

    public static void main(String[] args) {
        System.out.println("x =" + Test2 .x);
    }

{x /= 3; }
}

报错:

java 复制代码
 public static void main(String[] args) {
        System.out.println("x =" + Test2 .x);
    }

java: 无法从静态上下文中引用非静态 变量 x

修改3:

java 复制代码
public class Test2 {
   static int x = 10;
     { x += 5; }

    public static void main(String[] args) {
        System.out.println("x =" + Test2 .x);
    }

{x /= 3; }
}

结果:10会跳过:没有用static修饰的两个代码块

Q5:还是静态变量修饰的问题

静态方法内要调用方法外的变量,变量必须是静态的,如static方法内不能调用random函数

java 复制代码
public class Arraytest{
    int a[] = new int[6];
    public static void main ( String arg[] ) {
        System.out.println ( a[0] );
    }
}

报错:java: 无法从静态上下文中引用非静态 变量 a

修改1:

java 复制代码
public class Arraytest{
  //  int a[] = new int[6];
    public static void main ( String arg[] ) {
        int a[] = new int[6];
        System.out.println ( a[0] );
    }
}

输出0

修改2:

java 复制代码
public class Arraytest{
  static   int a[] = new int[6];
    public static void main ( String arg[] ) {
       
        System.out.println ( a[0] );
    }
}

输出0

Q5:super和this

在使用super和this关键字时,以下描述错误的是()

A、在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过

B、super()和this()不一定要放在构造方法内第一行

C、this()和super()可以同时出现在一个构造函数中

D、this()和super()可以在static环境中使用,包括static方法和static语句块

答案:BCD

C:

java 复制代码
public Cat(String name, String color) {
        super(name);
        this.color = color;
    }

继承中的构造方法

①在子类对象构造的过程中,必须先构造其父类对象

②在子类的构造方法中,自动调用父类的构造方法,然后才会继续往下执执行构造子类对象

④如果写了super(参数列表),则必须写在子类构造方法 的第一行,否则报错

⑤如果子类中没有写super(参数列表),而父类中又没有无参的构造方法,则编译报错

相关推荐
0白露22 分钟前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.1 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐1 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
战族狼魂2 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6223 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL3 小时前
ZGC初步了解
java·jvm·算法
杉之3 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch4 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
独好紫罗兰4 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
天天向上杰5 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal