Java学习记录(Day6)

  • 容器(集合)

之前学过的容器------数组   

弊端:只能存制定数据类型,数组长度不可改变

解决方法:list  Set  Map

  1. List 接口

实现类:ArrayList LinkedList   Vector

List中常用的方法

(1)添加元素add(值)  和 addAll(值)

把集合里的所有元素都添加到list,把listA看作一个数组对象加入list中

输出结果为

(2)获取元素get(index)

获取下标为2的值

(3)插入元素add(index,值)

在指定位置插入元素,其他元素向后移

list 有序的、连贯的,若插入的下标之前有空,则显示下标越界

输出list类型的数值直接调用toString方法

  1. 设置元素set(index,值)

  1. 查找对象contains(值) 和containsALL(值)

查找list是否包含某一个对象,找不到就返回-1

是否包含另一个集合的所有元素containsAll()

  1. 删除元素remove(值)

删除掉找到的第一个

参数传对象  删除这个对象 返回 boolean

参数传下标  删除下标位置对象   返回被删除的对象

  1. 获取数组长度size()和获取元素get()

  1. 迭代器Iterator()

  1. 扩容方式

ArrayList

初始容量  10,扩容1.5倍,数组存储

LinkedList  链表存储

ArrayList 和 LinkedList性能比较

ArrayList 是通过数组存储的  查找数据非常快

LinkedList 查找数据慢  通过双向检索的方式优化检索速度

ArrayList  插入和删除慢  LinkedList插入删除快

  1. 改变list中的值

在代码片段中,objs可以修改list的内容,是因为item引用的是list中的一个元素,而这个元素本身是一个List对象。当你将item强制转换为List类型并赋值给objs时,objs实际上引用了list中的那个List对象。
在Java中,对象是通过引用传递的。这意味着当你在循环中处理item时,item只是一个指向某个对象的引用。因此,当你将item转换为List类型并赋值给objs时,objs和item都指向同一个List对象。
由于objs现在直接引用了list中的List对象,所以通过objs调用List的方法(如set)会直接修改list中对应的元素。这是因为objs和list中的元素实际上是同一个对象,对它的任何修改都会反映出来。
然而,对于item = 44.44;这一行,情况不同。尽管item引用了list中的一个元素,但是当你将item重新赋值为44.44时,你只是改变了item引用的内容,而不是list中的元素。这是因为item现在指向了一个全新的Double对象,而list中的元素仍然是原来的对象,没有受到影响。只有当item引用的对象是可变的,并且你通过item修改了这个对象本身时,list中的元素才会被修改。在List的例子中,List对象本身就是可变的,因此可以通过objs来修改它。

  • 内部类
  1. 静态内部类

特点:

1.独立存在:

静态内部类可以不依赖于外部类的实例而独立存在。可以创建静态内部类的实例,而不需要先创建外部类的实例。

2.访问外部类的静态成员:

静态内部类可以访问外部类的所有静态成员(包括字段、方法),即使这些成员是私有的。但是,它不能直接访问外部类的非静态成员,除非通过外部类的实例来访问。

  1. 成员内部类

特点:

1.被定义在另一个类的内部,作为外部类的一个成员

2.成员内部类的实例总是与外部类的实例相关联。不能独立地创建成员内部类的实例,除非首先创建了外部类的实例。

3.成员内部类可以访问外部类的所有成员,包括私有成员。这是因为它实际上持有对包含它的外部类实例的引用。

4.与静态内部类不同,成员内部类可以访问外部类的非静态成员,因此它可以有非静态和静态成员。

  1. 局部内部类

定义在方法中 出不了这个方法

  1. 匿名内部类

创建一个抽象类,在里面定义一个抽象方法,实例化是必须实现这个抽象方法。

  • Lambda表达式

简化了函数式接口的使用,使得代码更加灵活和表达力更强。通过使用 Lambda 表达式,可以写出更少的代码,同时保持代码的清晰度和可维护性。

  • 代码块
  1. 静态代码块

在程序运行时,只会执行一次,加载类对象时执行

  1. 成员代码块

每一次new对象时执行,成员代码块在构造方法之前运行

  1. 构造方法

  1. 示例

子类代码如下:

父类代码如下:

主函数如下:

执行代码的顺序是

1.父类静态代码块

2.子类静态代码块

3.父类的成员代码块

4.父类的构造方法

5.子类的成员代码块

6.子类的构造方法

输出结果为:

虽然没有写super,但是再执行代码时要写执行父类的构造方法。

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值