java笔记day6

容器 集合

之前学过的容器 数组 它的弊端:只能存指定数据类型 数据长度不可改变

存储数据的方式:List Set Map

1,List 接口

实现类:ArrayList  LinkedList vector

List中常用的方法 :

(1)添加元素

示例:

list.add("A");
list.add(12);
list.add(null);
list.add(33.33);
list.add("A");

(2)获取元素

往方法里面添加,去获取get

结合上面的代码续写:

 //获取元素
Object obj= list.get(2);//往方法里面添加去获取get
 System.out.println(obj);//null

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

示例:

//在指定位置插入元素,其他元素向后移
        list.add(1,44);//往下标为1的位置插入44
        System.out.println(list);//[A, 44, 12, null, 33.33]

//        list.add(6,"C");//超出范围,下标越界
        list.add(5,"B");//往最后一个元素后面插入元素
        System.out.println(list);//[A, 44, 12, null, 33.33, B]

(4)设置替换元素

示例:

//设置替换元素
list.set(2,22);//设置下标为2的数据为44
System.out.println(list);//[A, 44, 22, null, 33.33, B]

(5)检查是否包含某一个对象(数据)

//检查是否包含某一个数据(对象)
boolean bool=list.contains(22);
System.out.println(bool);
bool=list.indexOf(22)!=1;
System.out.println(bool);

(6)检查一个集合是否包含另外一个集合中的所有元素

示例:

 List listA=new ArrayList();
        listA.add(33.33);
        listA.add(null);
//        listA.add(2);
        bool=list.containsAll(listA);
        System.out.println(bool);

(7)把一个集合中的所有元素添加到另一个集合中

示例:这里把listA的所有元素添加到list中

        list.addAll(listA);//[A, 44, 22, null, 33.33, B, 33.33, null]
      //list.add(listA);//[A, 44, 22, null, 33.33, B, A, [33.33, null]],添加一个对象元素
        System.out.println(list);
        System.out.println("=========");

(8)删除元素  (删除找到的第一个元素)

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

参数传下标 删除下表位置所在的那个对象  返回被删除的对象

传入的参数是数字,则删除该数字

示例:

list.remove("A");
System.out.println(list);

//删除指定下标的元素  传入数字就是下标
list.remove(2);

//如果要删除指定数字,需要
bool=list.remove((Integer)22);//删除下标返回对象
//删除对象返回bool值
System.out.println(bool);

(9)ArrayList扩容方式

初始容量是1.5  扩容 1.5倍

(10)LinkedList 和 ArrayList

LinkedList和ArrayList用法一样,存储数据的方式不一样

Linked采用链表

ArrayList用数组

/ArrayList和LinkedList性能比较
//ArrasyList是通过数组存储数据的 查找数据非常快
//LinkedList查找速度慢,通过双向检索方式优化检索速度

//ArrayList插入和删除慢  插入和删除数据相关数据需要后移或前移
// LinkedList查找和删除快

2.内部类  

静态内部类:

 

成员内部类:

局部内部类:

匿名内部类:

 

 

 

 

示例:

package com.easy719;

// 定义了一个公共类EasyInnerClass
public class EasyInnerClass {
    // 主方法,程序的入口点
    public static void main(String[] args) {
        // 调用静态方法test()
        test();
    }

    // 静态内部类InnerA,可以使用访问修饰符(public, protected, private, package-private)
    static class InnerA {
        // 静态内部类的具体实现细节
    }

    // 成员(非静态)内部类InnerB
    class InnerB {
        // 成员内部类的具体实现细节
    }

    // 一个方法inner(),在方法内部定义局部内部类
    public void inner() {
        // 定义局部内部类InnerC,注意局部内部类不能使用public等访问修饰符
        class InnerC {
            // 局部内部类的具体实现细节
        }
        // 创建局部内部类InnerC的一个实例
        new InnerC();
    }

    // 静态方法test(),用于演示内部类和接口的使用
    public static void test() {
        // 创建静态内部类InnerA的一个实例
        InnerA a = new InnerA();
        // 创建成员内部类InnerB的一个实例,需要先创建外部类的实例
        new EasyInnerClass().new InnerB();

        // 创建匿名内部类,实现AbstractClass接口
        AbstractClass ac = new AbstractClass() {
            // 实现AbstractClass的抽象方法method()
            public void method() {
                // 实现细节
            }
        };
        // 创建另一个匿名内部类实例
        AbstractClass aca = new AbstractClass() {
            // 实现AbstractClass的抽象方法method()
            public void method() {
                // 实现细节
            }
        };

        // 输出ac的类信息
        System.out.println(ac.getClass());
        // 检查ac和aca是否属于同一个类(匿名内部类每次创建都是不同的类)
        System.out.println(ac.getClass() == aca.getClass());

        // 创建EasyInter接口的匿名内部类实例
        EasyInter ei = new EasyInter() {
            @Override
            public void method() {
                // 实现EasyInter接口的抽象方法method()
            }
        };

        // 使用Lambda表达式简化匿名内部类的创建
        // Lambda表达式用于实现只有一个抽象方法的接口(函数式接口)
        EasyInter eia = () -> {
            int aa = 12;
            System.out.println("------");
        };
        // Lambda表达式的另一种写法
        eia = () -> System.out.println("11111");

        // 使用Lambda表达式创建EasyInterA接口的实例,该接口的method()方法有返回值
        EasyInterA ea = () -> 12;

        // 使用方法引用创建EasyInter接口的实例,引用EasyInnerClass类的静态方法fun()
        EasyInter ee = EasyInnerClass::fun;
        // 调用ee的method()方法,实际上调用的是EasyInnerClass的fun()方法
        ee.method();
    }

    // 定义一个静态方法fun()
    public static void fun() {
        // 方法体
        System.out.println("function");
    }
}

// 定义了一个函数式接口EasyInter,用于声明只有一个抽象方法的接口
@FunctionalInterface
interface EasyInter {
    // 声明一个没有实现的抽象方法method()
    void method();
}

// 定义了一个接口EasyInterA,用于声明有返回值的抽象方法
interface EasyInterA {
    // 声明一个没有实现的抽象方法method()
    int method();
}

// 定义了一个抽象类AbstractClass,包含一个抽象方法method()
abstract class AbstractClass {
    // 抽象方法没有方法体,不能直接new一个AbstractClass的实例
    public abstract void method();
}

// 定义了一个类Test,用于演示如何在外部类中使用内部类
class Test {
    // 定义一个静态方法method(),在方法中创建EasyInnerClass的静态内部类InnerA的实例
    public static void method() {
        EasyInnerClass.InnerA a = new EasyInnerClass.InnerA();
    }
}

3.代码块

(1)静态代码块  一个类的静态代码块在程序运行时只会执行一次(加载类对象的时候执行)

static {
    //静态代码块  一个类的静态代码块在程序运行时只会执行一次
    //加载类对象的时候执行
    System.out.println("静态代码块");
    //先有类再有对象,运行时先执行类
    //子父类:先执行父类再执行子类
}

运行顺序:1,(先有类再有对象,运行时先执行类,再执行对象)

2,(子父类之间:先执行父类再执行子类)

(2)成员代码块  直接写大括号“  {  }   ”叫做成员代码块

在每一次实例化对象的时候执行  成员代码块在构造方法之前执行

{
    //直接写大括号叫做成员代码块
    //在每一次实例化(new)对象的时候执行

    //成员代码块在构造方法之前运行
    System.out.println("成员代码块");
}

(3)构造方法

EasyBlock(){//构造方法  方法名和类名一样

    System.out.println("构造方法");
}

(4)子类和父类运行顺序

 public static void main(String[] args) {
//        new EasyBlock();
//        new EasyBlock(12);
        new EasySon();
        //1.父类静态代码块
        //2.子类静态代码块
        //3.父类成员代码块(在构造方法之前)
        //父类的构造方法
        //5.子类成员代码块
        //6.子类构造方法
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值