首页 > 编程语言 >学习Java的第六天(2024.7.19)

学习Java的第六天(2024.7.19)

时间:2024-07-19 20:55:38浏览次数:19  
标签:Java 2024.7 19 list System add println public out

1.容器类、集合类

之前学过的容器:数组,但是数组有局限:1.数组存储的数据类型有限制 2.数组存储的长度受限

2.容器类分为:List,Set,Map

3.List类:List是一个接口,他的实现类有:ArrayList,LinkedList,Vector

public static void main(String[] args) {
        List list = new ArrayList();//创建一个ArrayList对象list
}

4.List中常见的方法:(ArrayList中的存储是把各类型存放进数组中)

(1)add():添加数据

public static void main(String[] args) {
        List list = new ArrayList();

        list.add("A");
        list.add(12);
        list.add(null);
        list.add(33.33);
        System.out.println(list);//[A,12,null,33.33]
    }

 

(2)get():获取某一项的数据

      public static void main(String[] args) {
        List list = new ArrayList();

        list.add("A");
        list.add(12);
        list.add(null);
        list.add(33.33);
        System.out.println(list);//[A,12,null,33.33]

        //获取指定元素  get
        Object obj = list.get(2);
        System.out.println(obj);//输出null(数组下标为2的项)
    } 

(3)add还可以向指定位置插入元素

(4) set():修改数组中的元素值

public class EasyList {
    public static void main(String[] args) {
        List list = new ArrayList();

        //List中常用的方法
        //添加数据(可以存储任意类型)  add
        list.add("A");
        list.add(12);
        list.add(null);
        list.add(33.33);
        System.out.println(list);

        //获取指定元素  get
        Object obj = list.get(2);
        System.out.println(obj);

        //在指定位置插入元素 add
        list.add(1,44);
        System.out.println(list);//插入元素后,其他元素往后移
        //list.add(6,"B");下标越界,因为不确定第五项的内容
        list.add(5,"B");
        System.out.println(list);//能插入第五项

        //设置某一项的数据
        list.set(2,22);//将下标为2的数据设置成22
        System.out.println(list);//输出[A, 44, 22, null, 33.33, B]
}

(5)contains():判断是否包含某个元素

        boolean bool = list.contains(22);
        System.out.println(bool);//包含22,布尔类型的变量bool为true

(6) containsAll():判断是否多元素数组中的包含全部元素

        List lista = new ArrayList();
        lista.add(33.33);
        lista.add(null);
        bool = list.containsAll(lista);
        System.out.println(bool);//true,list对象全部包含liata对象的元素[33.33,null]
        System.out.println(lista);//[33.33,null]
        lista.add(2);//将2添加到lista中
        bool = list.containsAll(lista);//false,list中不含2
        System.out.println(bool);//false

(7)addAll():将全部元素依次添加到原容器对象中

        list.add(lista);//添加一个元素,只不过这个元素是lista数组
        System.out.println(list);
        //[A, 44, 22, null, 33.33, B, [33.33, null, 2]]
        list.addAll(lista);//添加多个元素,将lista中的元素都加入list
        System.out.println(list);
        //[A, 44, 22, null, 33.33, B, [33.33, null, 2], 33.33, null, 2]

(8)remove():删除元素

        //删除元素(删除找到的第一个元素)
        //参数传对象   删除这个对象    返回boolean
        //参数传下标   删除下标位置的对象   返回被删除的对象
        list.add("A");//[A,44, 22, null, 33.33, B, [33.33, null, 2], 33.33, null, 2, A]
        list.remove("A");
        System.out.println(list);//只会删除找到的第一个元素,第一个null
        list.remove(2);//把下标为2删除掉,null被删除
        System.out.println(list);

        list.remove((Integer)22);
        //加上(Integer)表示删除22这个元素,否则会自动识别成删除下标为22的元素(很容易下标越界)
        //list.remove(22);//下标越界
        System.out.println(list);

(9)size():获取数组中一共放有多少值(目前)

        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }

输出结果如下:依次输出每一项的值

第二种方式获取数组list的值:通过for循环遍历

        for (Object item:list){
            System.out.println(item);
        }
//利用遍历的方式每次输出一个变量item(只是将list中每一项的值赋给变量item)

第三种方式获取值:设置一个迭代器

       Iterator it = list.iterator();//获取了一个迭代器(迭代器只能知道下一个元素是谁,以及有没有下一个元素)
        while (it.hasNext()){//it.hasNext()判断还有没有下一个元素
            System.out.println(it.next());//迭代出每一个元素
        }//利用迭代器获取每一个元素

注意:!!!!!!!!!!!!!!!!!!!!!!

for (Object item:list){
            if (item instanceof Double){
                if ((Double) item ==33.33){
                    System.out.println("item赋值"+item);
                    item = 99.99;
                }
            }
        }
        System.out.println(list);//只改变了输出的item的值,并不改变list的值

这种方式只会修改变量item的值,真正list对象数组中的元素并不会发生改变

5.ArrayList和LinkedList的区别:

ArrayList (形式:数组)

        初始容量:10 每次扩容扩1.5倍(自动扩容,最大值为21亿)

LinkedList (形式:链表) 实现了List接口

        通过指向链表的方式存储数据,一个数据指向另一个数据,这样串联起来。

6.ArrayList和LinkedList性能的比较:

查找速度:

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

LinkedList是通过链表一项一项向后查找,查找速度慢(通过双向检索的方式优化检索速度)

插入、删除数据:

ArrayList插入和删除慢 (要保持有序和连贯)

LinkedList插入和删除快 (链表下一项只需要重新指向)(是双向链表,可以进行双向检索,从两边向中间检索,节省时间)

7.内部类和外部类:

下面代码中,Test类就是外部类(在类的外部),InnerA和InnerB是EasyInnerClass的内部类(在一个类的内部就叫做内部类)

public class EasyInnerClass {
    //静态内部类     用的时候最多
    public static class InnerA{}//是一个内部类(在EasyInnerClass类的内部),此时可以用protected/private修饰
    //成员内部类     成员是对象
    class InnerB{}//四个权限访问修饰符都可以修饰
}
class Test{
    public static void method(){
        EasyInnerClass.InnerA a = new EasyInnerClass.InnerA();
    }
}//Test就是外部类(在类的外面)
//类只能是public或default修饰

8.内部类

内部类分为静态内部类、成员内部类、局部内部类、匿名内部类
 

    //静态内部类     用的时候最多
    public static class InnerA{}//是一个内部类(在EasyInnerClass类的内部),此时可以用protected/private修饰

    //成员内部类     成员是对象
    class InnerB{}//四个权限访问修饰符都可以修饰

    //局部内部类
    public void inner(){//局部内部类在方法中写
        class InnerC{}//局部内部类   只能用default修饰(public、protected、private都不行),也不能是静态的
    }
    
    //匿名内部类
    //建立一个方法写匿名内部类
    public static void test(){
        InnerA a = new InnerA();
        new EasyInnerClass().new InnerB();

        AbstractClass ac = new AbstractClass(){//虽然抽象类不能实例化,但是语法上能写出来,只需要在类内部实现抽象方法,这里的{};就是类内部
            @Override
            public void method() {

            }
        };
        AbstractClass aca = new AbstractClass(){//虽然抽象类不能实例化,但是语法上能写出来,只需要在内部实现抽象方法
            @Override
            public void method() {
                System.out.println();
            }
        };
        System.out.println(ac.getClass());//$1表示第一个匿名内部类
        System.out.println(ac.getClass()==aca.getClass());
        EasyInter ei = new EasyInter(){
            @Override
            public void method(){}
        };//接口也有这种写法
        EasyInter eia = ()->{int aa=12;
            System.out.println("--------");};
        eia=()-> System.out.println("111");//实现匿名内部类

        EasyInterA ea=()->12;
        //EasyInter ee = EasyInnerClass::fun;//使用EasyInnerClass::fun方法代替EasyInter中未执行的方法。
    }
//写一个抽象类
abstract class AbstractClass{
    public abstract void method();
}

9.代码块:

在类中,一个大括号(哪怕什么都不写,这也是一个代码块)

代码块在每一次创建对象时都会执行

public class EasyBlock {
    //代码块:大括号{}
    {
        //成员代码块   每一次new对象的时候执行
        System.out.println("这是成员代码块");
    }
}

10.静态代码块

static{

}

静态代码块在程序运行期间,只会执行一次(在成员代码块运行之前就运行)

public class EasyBlock {
    static {//静态代码块   一个类的静态代码块在程序运行期间只会执行一次(在成员代码块之前运行)
        //加载类对象时执行
        System.out.println("父类----静态代码块");
    }
}

11.子类继承父类时代码块的运行顺序:

        1.父类静态代码块
        2.子类静态代码块
        3.父类的成员代码块
        4.父类的构造方法
        5.子类的成员代码块
        6.子类的构造方法

public class EasyBlock {
    {
        //成员代码块   每一次new对象的时候执行
        System.out.println("这是父类成员代码块");
    }
    static {//静态代码块   一个类的静态代码块在程序运行期间只会执行一次(在成员代码块之前运行)
        //加载类对象时执行
        System.out.println("父类----静态代码块");
    }
    EasyBlock(){
        System.out.println("父类---构造方法");
    }

    public static void main(String[] args) {
        new EasySon();
    }
}

class EasySon extends EasyBlock {
    {
        System.out.println("这是子类成员代码块");
    }
    static {//静态代码块   一个类的静态代码块在程序运行期间只会执行一次(在成员代码块之前运行)
        //加载类对象时执行
        System.out.println("子类---------静态代码块");
    }
    EasySon(){
        System.out.println("子类---构造方法");
    }
}

运行结果:

标签:Java,2024.7,19,list,System,add,println,public,out
From: https://blog.csdn.net/tuowenjian/article/details/140545390

相关文章

  • 0基础学JAVA(第六天)
    1.List集合list容器(集合)  之前学过的集合是数组,但是数组只能存储一种类型的数据,而且一旦声明长度之后不能更改,只能建立一个新的数组,所以为了解决这个弊端建立了listlist  接口     有三个实现类:ArrayList    LinkList  Vector1.添加元素  ......
  • 0基础学JAVA(第五天)
    1.String类String类是一个引用类型,默认值为null;字符串在声明之后是一个常量,不能改变,是一个privatefinal修饰的value,只能在类的内部访问,而且类的内部没有提供任何修改的方法,所以是一个常量1.声明字符串:Stringstri="abc你好";stri=newString();stri=n......
  • 0基础学JAVA!!!(第四天)
    1.包装类整型:Byte,Short,Integer,Long浮点型:Float,Double字符型:Character布尔型:BooleanIntegerinta=21;Integerintb=12;System.out.println(inta==intb);Integerintac=200;Integerintc=200;System.out.prin......
  • 0基础学JAVA!!!(第三天)
    0基础学JAVA!!!(第三天)一,方法:(1)方法的定义:  定义一个方法需要有返回值类型 方法的名称(方法的参数){方法体}  返回值类型:当这个方法不需要返回值的时候返回值类型就用void,用void不是返回一个null值,是不返回值!!在用void的时候可以写return,但是不返回值,用作终止方法返回值......
  • 07-19 题解
    07-19题解B思路实质:有一个完全图,删掉一些边,然后在图上找一棵生成树但是图的边数是\(n^2\)级别的,极其稠密找生成树的步骤:从一个点开始,把与它相连的,不在同一连通块的点连在一起所以我们只要确保每次都能在尽量少的步数内找到一个合法点一共有n个点,确定一个点之......
  • 为了Python换源,我开发了一个库「pipco 0.0.19」
    你好,我是悦创。有时候某个源又出问题,或者频繁切换源。我就想开发一个库可以切换的,链接:https://pypi.org/project/pipco/库是开源的,可以自行学习或者使用。使用方法:安装pipinstallpipco查看帮助pcohelp当你需要使用Python时,Pip是一个非常重要的工具,它用于安......
  • 2024.7 做题记录 2 / 顾影自怜了几回 直到看见妄自蕤
    CF653E不难发现其实就是在假想中建立出可以存在的边的图,要求跟\(1\)相连的连通块个数\(\leqk\)且与\(1\)的连边个数\(\geqk\)且全图联通,这个我们只需要知道其去掉\(1\)的连通性就很好讨论了。我们其实不能直接建出这个极度稠密的图,但是我们可以用数据结构优化建图,......
  • java数组之数组工具类——Arrays的使用
    一、Arrays工具类简述    在java的类库中有许多现成的已经封装好的方法,可以供开发人员使用,比如我们之前学的二分法查找或者快速排序等。所以在实际的开发中,我们是不用自己编写这些常用的方法的。那么在常用的数组方法在哪里的?java作为面向对象的语言,所有方法都会封装......
  • 花几千上万学习Java,真没必要!(十四)
    方法:测试代码1:不带参数,不带返回值的方法packagetestmethod.com;publicclassTestClassMethod{//定义一个不带参数且不带返回值的方法publicstaticvoidmyMethod(){//在这里编写方法体System.out.println("Thisismymethod");}......
  • JavaScript实现通过按纽控制电梯上下移动,并实现帧频动画
    varapp=newPIXI.Application(520,460);document.body.appendChild(app.view);//创建背景varbg=newPIXI.Sprite.fromImage("res/lianxi/elevator/bg.png");app.stage.addChild(bg);varelevator=newPIXI.Sprite.fromImage("res/lianxi/elevator/dt......