day12java基础学习笔记

     2022-03-16     581

关键词:

集合/集合框架(List)

数组和集合的区别

  • 数组长度固定的,一旦定义,就无法改变
  • 集合长度可变
  • 数组中可以粗出基本数据类型,也可以是对象(实际上是对象的引用
  • 集合只能存储对象的引用)

Java集合体系:分为Collection和Map两种体系

Collection接口

技术分享

Collection有两个派生出来的接口:Set、List

  • Set:特点是:元素无序,不可重复
  • List:特点是:元素有序,可以重复

Collection接口的常用抽象方法

  • boolean add(Object o):向集合中添加一个元素,如果添加成功,则返回true,否则返回false
  • boolean addAll(Collection c):把另一个集合中的所有元素添加到当前集合中,如果添加成功,则返回true,否则返回false
  • void clear():清除集合里所有元素,将集合长度变为0
  • boolean contains(Object o):返回集合里是否包含指定元素
  • boolean containAll(Collection c):返回集合里是否包含集合c里包含的所有元素
  • boolean isEmpty():返回当前集合是否为空
  • Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素
  • boolean remove(Object o):删除集合中指定的元素c,当集合中包含一个或者多个元素c时,该方法只删除第一个符合条件的元素,陈宫删除返回true
  • boolean removeAll(Collection c):从集合中删除集合c中包含的素有元素,相当于用当前集合减去集合c,如果删除了一个或者一个以上的元素,该方法返回true
  • int size():返回集合中元素个数
  • Object[] toArray():将集合转换成一个数组,转换后的数组时Object类型

迭代器Iterator实现集合遍历

Iterator也是集合框架中的成员,但是他不能用来盛庄元素,只能用来遍历(即迭代)Collection中的元素,Iterator对象那个也被成为迭代器

如果想使用Iterator迭代器,则必须有一个集合对象,没有集合对象,迭代器也就没有意义了

常用的迭代器方法

  • boolean hasNext():查看集合是否还有元素,如果集合被遍历完了,则返回false,否则返回true
  • Object next():返回集合中的下一个元素,注意放回类型是Object
  • boolean remove():将上一次返回的元素删除,删除成功返回true,否则false

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    public class CollectionDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            //给集合中添加元素
            c.add("hello");
            c.add(123);
            c.add("asd");
            c.add("hello");
            c.add(new Student("张三",15));
            Iterator it = c.iterator(); // 获取迭代器
            while (it.hasNext()) {
                Object obj =it.next();
                System.out.println(obj);
            }
        }
    }
    

遍历集合的另一个方式:增强for循环

也叫foreach循环,每次循环都把数组/集合中的元素拿出来复制给一个变量,用来遍历集合和数组

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    public class CollectionDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("hello");
            c.add(123);
            c.add("asd");
            c.add("hello");
            c.add(new Student("张三",15));
            for (Object obj : c) {
                System.out.println(obj);
            }
        }
    }
注意! :在使用增强for遍历集合时,采用的值传递,改变循环变量的值不会影响到集合中的元素,但可以改变变量的值。
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    public class CollectionDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("java");
            c.add("javaee");
            c.add("javase");
            for (Object obj : c) {
                String name = (String)obj;//强转为String类型
                name = "String"+ name;//在字符串前面加上String字样
            }
            System.out.println(c);// 元素并不会改变
        }
    }

如何在遍历时删除集合中的元素

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    public class CollectionDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("hello");
            c.add(123);
            c.add("asd");
            c.add("hello");
            c.add(new Student("张三",15));
            Iterator it = c.iterator();
            while(it.hasNext()){
                Object obj = it.next();
                if(obj.equals(123)){  //调用Object类的equals()方法进行是否相等比较
                    it.remove(); //这里调用Iterator的remove()方法进行删除
                }
            }
            it = c.iterator(); //重置迭代指针,在上一轮循环中指针已指到末尾位置,重新开始遍历需要将指针重置
            while (it.hasNext()) {
                Object obj1 =it.next();
                System.out.println(obj1);
            }
        }
    }

List接口

是Collection接口的一个重要子接口,集合类中元素有序,且可重复,集合中的每个元素都有其对应的顺序索引。

List接口实现类有三种遍历方式

  • 使用Iterator迭代器遍历集合
  • 使用for循环中get(int index)通过索引来遍历
  • 增强for循环

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Iterator;
    public class ListDemo {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            List al = new ArrayList();
            al.add("java");
            al.add("javaee");
            al.add("javase");
            //使用Iterator迭代器遍历集合
            Iterator it = al.iterator();
            while(it.hasNext()){
                Object obj = it.next();
                System.out.println(obj);
            }
            //增强for循环j进行遍历
            for (Object obj : al) {
                System.out.println(obj);
            }
            //使用for循环中get(int index)通过索引来遍历
            for (int i = 0; i < al.size(); i++) {
                Object obj = al.get(i);
                System.out.println(obj);
            }
        }
    }
    

List中遍历集合时对元素进行删除:

逆序遍历删除元素

    import java.util.ArrayList;
    import java.util.List;
    public class RemoveDemo {
        public static void main(String[] args) {
            List al = new ArrayList();
            al.add("java");
            al.add("java");
            al.add("java");
            al.add("java");
            //逆序遍历删除
            for (int i = al.size()-1; i >=0; i--) {
                String str =(String)al.get(i);
                if(str.equals("java")){
                al.remove(i);
                }
            }
            System.out.println(al);
        }
    }

案例练习,验证使用contains方法时是否调用equals方法

    public class Person {
        private String name;
        private int age;

        public Person() {
            super();
        }
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Person other = (Person) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }

    import java.util.ArrayList;

    public class ArrayListDem {
        public static void main(String[] args) {
            ArrayList al = new ArrayList();
            Person p1 = new Person("p1",11);
            Person p2 = new Person("p2",12);
            Person p3 = new Person("p3",13);
            Person p4 = new Person("p4",14);
            al.add(p1);
            al.add(p2);
            al.add(p3);
            al.add(p4);
            for (Object object : al) {
                System.out.println(object);
            }
            System.out.println("----------");
            System.out.println(al.contains(p3));
        }
    }

面试题:简述List的子类特点

    ArrayList:
        底层数据结构是数组,查询快,增删慢。
        线程不安全,效率高。
    Vector:
        底层数据结构是数组,查询快,增删慢。
        线程安全,效率低。
    Vector相对ArrayList查询慢(线程安全的)
    Vector相对LinkedList增删慢(数组结构)
    LinkedList:
        底层数据结构是链表,查询慢,增删快。
        线程不安全,效率高。

    Vector和ArrayList的区别
        Vector是线程安全的,效率低
        ArrayList是线程不安全的,效率高
    共同点:都是数组实现的
    ArrayList和LinkedList的区别
        ArrayList底层是数组结果,查询和修改快
        LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
    共同点:都是线程不安全的

List有三个儿子,我们到底使用谁呢?

    查询多用ArrayList
    增删多用LinkedList
    如果都多ArrayList

java基础学习笔记day01

      java基础学习笔记day011.软件开发:  软件:按照特定顺序组织的计算机数据和指令的集合  开发:软件的制作过程  软件开发:借助开发工具和计算机语言制作软件2.java概述:  java之父:詹姆斯·高斯林 ... 查看详情

day09java基础学习笔记

抽象abstract抽象类和抽象方法必须用abstract关键字修饰抽象类格式abstractclass类名{}抽象方法定义,在返回值钱,或修饰符前加上abstract关键字方法没有方法体,即:没有{}abstractpublicvoideat();publicabstractvoideat();抽象类不一定有抽象方... 查看详情

day11java基础学习笔记

冒泡排序相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处,第二次比较厚,最大值放在了倒数第二的位置,一直到第二个元素确定了,整个数组的顺序也就确定了publicclassArrayDemo{publicstaticvoidmain(String[]a... 查看详情

day08java基础学习笔记

继承extends(也叫扩展)多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。通过extends关键字可以实现类的继承class子类名extends父类名{}继承的案... 查看详情

day03java基础学习笔记

三元运算符1.格式:(条件表达式)?表达式1:表达式2;2.运算规则:先对条件表达式求值,得出一个逻辑值,如果至为true,则执行表达式1;如果值为false,则执行表达式2。443.典型用法:Stringstr=(5<3)?"5大于3":"5大于3";... 查看详情

零基础入门学习java课堂笔记——day04

Java数组1.数组概述定义:数组是相同类型的有序集合,同一组同一类型的数据可以按照先后次序排列组合在一起,其中一个数据可以称为元素,每个数组元素可以通过一个下表访问它们2.数组声明创建dataType[]arrayRefVar;//firstdataType... 查看详情

day06java基础学习笔记

面向对象当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始改进,能不能把这些步骤和功能再进行封装,封装时根据不同... 查看详情

day02java基础学习笔记

自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型1.各种进制的表现形式和特点二进制,八进制,十进制,十六进制二进... 查看详情

java学习笔记day_01

...以我按照传智播客的视频和Java核心思想来学习,前面的基础部分主要是用于个人的复习使用的。第一段代码:HelloWorldpublicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.prin 查看详情

毕向东java视频学习笔记day11-day13多线程

Java_Day12多线程01进程:正在进行中的程序(直译).线程:就是进程中一个负责程序执行的控制单元(执行路径)一个进程中可以多执行路径,称之为多线程。一个进程中至少要有一个线程。开启多个线程是为了同时运行多部分代码。... 查看详情

python学习笔记-day1-python基础(代码片段)

1.python诞生关于Python的起源,吉多·范罗苏姆在1996年写到:六年前,在1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间。我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西。我决定为当时我正... 查看详情

nsatp-a学习笔记之day2-7xxe漏洞(代码片段)

文章目录XXE-基础实验实验目的实验环境实验工具实验内容实验步骤1.访问目标进行注入攻击2.尝试进行登录,并进行抓包3.根据xxe注入漏洞,构造payloa免责声明XXE-基础实验实验目的练习XXE(XML注入)实验环境目标机:windo... 查看详情

python学习笔记day1基础介绍

Alex博客:http://www.cnblogs.com/alex3714/articles/5465198.html一、本节主要内容Python介绍发展史Python2or3?安装HelloWorld程序变量用户输入模块初识.pyc文件数据类型初识数据运算表达式if...else语句表达式for循环breakandcontinue 表达式while循环... 查看详情

java零基础小白学习免费教程day12-异常&log4j(代码片段)

day12_JAVAOOP课程目标1.【理解】什么是异常2.【理解】异常的体系结构3.【掌握】处理异常的方式4.【理解】自定义异常5.【理解】Log4J的作用视频:https://www.bilibili.com/video/BV1QG4y1J76q?p=64异常概述什么是异常​异常,就是不... 查看详情

java零基础小白学习免费教程day12-异常&log4j(代码片段)

day12_JAVAOOP课程目标1.【理解】什么是异常2.【理解】异常的体系结构3.【掌握】处理异常的方式4.【理解】自定义异常5.【理解】Log4J的作用视频:https://www.bilibili.com/video/BV1QG4y1J76q?p=64异常概述什么是异常​异常,就是不... 查看详情

day2计算机基础简介学习笔记

 计算机一般来说计算机是由硬件系统和软件系统组成,今天只了解硬件系统的相关原理。 简单来说一台典型的计算机在硬件方面主要由cpu,储存器,I/O设备和一条系统总线连接起来的。  1.cpucpu是计算机的大脑,... 查看详情

java基础笔记day01

JAVA开发之路---基础篇软件开发软件:一系列按照特定顺序组织的计算机数据和指令的集合常见的软件:      系统软件:windowsdosIOS      应用软件:扫雷等桌面软件什么是开发:制作软... 查看详情

java学习笔记---day1

💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和大家一起进步成长💕目录💕前言:作者是一名正在学习JAVA的初学者,每天分享自己的学习笔记,希望能和大家... 查看详情