首页 > 其他分享 >集合基础篇(黑马)

集合基础篇(黑马)

时间:2022-12-20 18:56:32浏览次数:55  
标签:String ArrayList 基础 System public ar 集合 黑马 out

我什么要用集合?

  • 自动扩容

集合储存的特点和数组相比

可以发现数组基本数据类型和引用数据类型都可以储存,而集合只能储存引用数据类型,如果储存引用数据类型将会变成 其包装类

  • 数组和集合的对比

ArrayList

泛型类

  • 常用方法
    构造:public ArrayList ()

  • 构造方法

package Test;

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        //构造方法
        //ArrayList<String> ar=new ArrayList<String>();
        ArrayList<String> ar=new ArrayList<>();//jdk新特性
        System.out.println(ar);//[]

    }
}

当没有元素时输出[]是由java官方自己实现的,他们将集合里面的元素在输出的时候用[]包裹起来,输出的时候调用AarrayList的toString方法

  • add方法


可以重add方法的源代码中可见,add方法不管添加什么其最终的返回值都是true,,所以我们不用关心add方法的返回值

  • 删除
package Test;

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        //remove:删除
        //1.  boolean remove(E e) 删除指定的元素 返回是否删除成功
        ArrayList<String> ar=new ArrayList<>();
        ar.add("hello");
        ar.add("the");
        ar.add("world");
        ar.add("hi");
         boolean b = ar.remove("the");
        System.out.println(b);//true
        System.out.println(ar);//[hello, world, hi]
        //当集合中没有该元素时将会返回false
         boolean b1 = ar.remove("good");
        System.out.println(b1);//false
        System.out.println(ar);//[hello, world, hi]
        //E remove (int index):删除指定索引的元素:返回被删除的元素
         String s = ar.remove(0);//删除索引为0的元素
        System.out.println(s);//hello
        System.out.println(ar);//[world, hi]

        //当下标越界将会在运行期间报下标越界异常
        ar.remove(2);//IndexOutOfBoundsException

    }
}

  • 修改
package Test;

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        //修改:将指定索引的值修改为指定的值:并将原来那个值返回
        //E set(int index,E e)
        ArrayList<String> ar=new ArrayList<>();
        ar.add("hello");
        ar.add("the");
        ar.add("world");
        System.out.println(ar);//[hello, the, world]
        //修改
         String s = ar.set(1, "a");//将下标是1的值修改为"a"
        System.out.println(s);//the
        System.out.println(ar);//[hello, a, world]

    }
}

  • 获取指定索引的元素 get
package Test;

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        //修改:将指定索引的值修改为指定的值:并将原来那个值返回
        //E set(int index,E e)
        ArrayList<String> ar=new ArrayList<>();
        ar.add("hello");
        ar.add("the");
        ar.add("world");
        System.out.println(ar);//[hello, the, world]
        //获取指定索引的元素:返回获取的元素 E get(int index)
         String s = ar.get(2);
        System.out.println(s);//world


    }
}

  • 获取集合的长度
package Test;

import java.util.ArrayList;
import java.util.Arrays;

public class ArrayListTest {
    public static void main(String[] args) {
        //修改:将指定索引的值修改为指定的值:并将原来那个值返回
        //E set(int index,E e)
        ArrayList<String> ar=new ArrayList<>();
        ar.add("hello");
        ar.add("the");
        ar.add("world");
        System.out.println(ar);//[hello, the, world]
        //获取指定索引的元素:返回获取的元素 E get(int index)
         String s = ar.get(2);
        System.out.println(s);//world
       //获取集合的长度 int size()
        System.out.println(ar.size());//3
        //遍历集合内的每一个元素
//快捷键 ar.fori
        for (int i = 0; i < ar.size(); i++) {
            System.out.println(ar.get(i));
        }

        }


    }


练习:指定要添加元素的数量

package Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
//练习:集合的遍历方式
public class ArrayListTest {
    public static void main(String[] args) {
        Scanner st=new Scanner(System.in);
        ArrayList<String> ar=new ArrayList<>();
        System.out.println("你需要添加的字符串数量为:");
        int num;
        num=st.nextInt();
        for (int i  = 0; i  < num; i ++) {
            System.out.println("请输入要添加的字符串:");
            String str=st.next();
            ar.add(str);
        }
        //遍历并输出集合
        System.out.print("[");
        for (int i = 0; i < ar.size(); i++) {
            if(i!=ar.size()-1)
            System.out.print(ar.get(i)+",");
            else{
                System.out.print(ar.get(i ));
            }
        }
        System.out.print("]");
    }

}


package Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
//练习:集合的遍历方式
//定义学生类
class Student{
    private String name;
    private int age;
//无参构造
    public Student() {};
    public Student(String name,int age){
        this.age=age;
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}
public class ArrayListTest {
    public static void main(String[] args) {
        Student st1=new Student("张三",13);
        Student st2=new Student("李四",18);
        ArrayList<Student> ar=new ArrayList<>();
        ar.add(st1);
        ar.add(st2);
        //遍历
        for (int i = 0; i < ar.size(); i++) {
          Student stu=ar.get(i);
            System.out.print(stu.getName());
            System.out.println(stu.getAge());
        }

    }
}


用循环同时实例化指定个对象,建议用对象数组进行操作,而在集合中添加指定个对象由于集合可以自动拓展长度,可以直接用add添加对象,不用把每个对象都命名,同样的操作用集合更简单

package Test;

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListTest1 {
    public static void main(String[] args) {
      //学生类已经被定义好了
        Scanner st=new Scanner(System.in);
        int num;
        System.out.println("你需要录入的对象数量为:");
         num=st.nextInt();
         ArrayList<Student> ar=new ArrayList<>();
         //每次定义一个对象然后添加到集合中
        for (int i = 0; i < num; i++) {
            Student stu=new Student();
            System.out.println("学生的姓名为:");
            String name=st.next();
            System.out.println("学生的年龄为:");
            int age=st.nextInt();
            stu.setAge(age);
            stu.setName(name);
            ar.add(stu);
        }
        //遍历集合
        for (int i = 0; i < ar.size(); i++) {
             Student student = ar.get(i);
            System.out.print(student.getName()+" ");
            System.out.println(student.getAge());
        }
    }
}

  • 不用方法实现--用flag标记
package Test;

import java.util.ArrayList;
import java.util.Scanner;
class User{
    private String id;
    private String usename;
    private String password;

    public User() {
    }

    public User(String id, String usename, String password) {
        this.id = id;
        this.usename = usename;
        this.password = password;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setUsename(String usename) {
        this.usename = usename;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public String getUsename() {
        return usename;
    }

    public String getPassword() {
        return password;
    }
}
//用id查找用户信息,查找成功返回true,失败返回false
public class ArrayListTest1 {
    public static void main(String[] args) {
     User st1=new User("1234","张三","aaa");
     User st2=new User("5678","李四","bbb");
     User st3=new User("91011","王五","ccc");
        ArrayList<User> ar=new ArrayList<>();
        ar.add(st1);
        ar.add(st2);
        ar.add(st3);
        //实现按id查找用户信息
        Scanner st=new Scanner(System.in);
        System.out.println("请输入一个id:");
         String myid = st.next();
         boolean falg=false;
        for (int i = 0; i < ar.size(); i++) {
            if(ar.get(i).getId().equals(myid)){
               falg =true;

            }

        }
        if(falg==false)
            System.out.println("false");
        else
            System.out.println("true");

    }
}

  • 使用方法(变形:如果查找成功返回索引,不成功则返回-1,思想一样)
package Test;

import java.util.ArrayList;
import java.util.Scanner;
class User{
    private String id;
    private String usename;
    private String password;

    public User() {
    }

    public User(String id, String usename, String password) {
        this.id = id;
        this.usename = usename;
        this.password = password;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setUsename(String usename) {
        this.usename = usename;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public String getUsename() {
        return usename;
    }

    public String getPassword() {
        return password;
    }
}
//用id查找用户信息,查找成功返回true,失败返回false
public class ArrayListTest1 {
    public static void main(String[] args) {
     User st1=new User("1234","张三","aaa");
     User st2=new User("5678","李四","bbb");
     User st3=new User("91011","王五","ccc");
        ArrayList<User> ar=new ArrayList<>();
        ar.add(st1);
        ar.add(st2);
        ar.add(st3);
        boolean c = contains(ar, "1234");
        System.out.println(c);//true
    }
    //用id查找用户信息
  public static   boolean contains(ArrayList<User> ar,String id){//传入一个集合 一个id
        for (int i = 0; i < ar.size(); i++) {
            if(ar.get(i).getId().equals(id)){
                return true;
            }
        }
        return false;
    }

}

如果同时都要返回索引和true,在一个方法中调用另一个方法即可

  • 返回多个数据

    对于一个函数返回多个相同类型的数据,可以返回一个数组,用数组完全可以做到,但是数组需要考虑长度(下标)如果我们用集合来操作则简单的多)
package Test;

import java.util.ArrayList;

class Phone{
    private String brand;
    private float price;

    public Phone() {
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public float getPrice() {
        return price;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                '}';
    }

    public Phone(String brand, float price) {
        this.brand = brand;
        this.price = price;
    }
}
public class ArrayListTest2 {
    public static void main(String[] args) {
      Phone p1=new Phone("小米",1000.0f);
      Phone p2=new Phone("apple",800.0f);
      Phone p3=new Phone("华为",10000.0f);
        ArrayList<Phone> ar=new ArrayList<>();
        ar.add(p1);
        ar.add(p2);
        ar.add(p3);
        ArrayList<Phone> s = contain(ar);
        System.out.println(s);//[Phone{brand='小米', price=1000.0}, Phone{brand='apple', price=800.0}]
        
    }
    public static ArrayList<Phone> contain(ArrayList<Phone> ar){
        ArrayList<Phone>ar1=new ArrayList<>();//实例化集合用于储存多个数据
        for (int i = 0; i < ar.size(); i++) {
            if(ar.get(i).getPrice()<3000){
              ar1.add(ar.get(i));

            }
        }
       return ar1;//返回集合
    }
}

标签:String,ArrayList,基础,System,public,ar,集合,黑马,out
From: https://www.cnblogs.com/swtaa/p/16994170.html

相关文章

  • C语言基础一
    C语言基础原文链接:青空の霞光_C语言程序设计(二)基础内容C程序基本格式前面在创建项目之后自动生成了一个.c文件,这个就是编写的程序代码文件:#include<stdio.h>intma......
  • JavaScript 逆向 ( 一 ) --- JavaScript 语法基础
    1、JavaScript基础菜鸟教程JavaScript教程:​​https://www.runoob.com/js/js-tutorial.html​​1.基础数据类型:number、string、boolean、null、undefined、object2.顺......
  • 基础算法(排序 & 查找)
    快速排序、归并排序、整数二分查找、浮点数二分查找快速排序主要思想是分治:确定分界点调整范围递归处理左右两段代码:#include<iostream>usingnamespacestd;......
  • JVS低代码基础介绍
    企业信息化底座    JVS是面向软件开发团队可以快速实现应用的基础开发脚手架,主要定位于企业信息化通用底座,采用微服务分布式框架,提供丰富的基础功能,集成众多业务引擎......
  • 什么是postman的集合断言-软件测试知识
    在postman中,大家都使用过断言,但是我们使用的断言都是针对每一个接口或者是每一个用例添加的,那么是否有可以同时对多个用例或接口添加断言呢?答案是肯定有的。那么接下......
  • hadoop系基础概念扫盲
    hadoop版本:hadoop1.0,hadoop2.0Hadoop1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成。HDFS由一个NameNode和多个DataNode组成,Map......
  • CentOS7基础网络配置
    1、网卡配置vi/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0HWADDR=00:0C:29:6C:BB:E6NM_CONTROLLED="yes"ONBOOT=yesPEERDNS=yesBOOTPROTO=staticIPADDR=192.168......
  • 即时通讯音视频开发之音频基础及编码原理
    即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术=音视频处理技术+网络传输技术的横向技术应用集合体,而公共互联网不是为了实时......
  • 数据结构 玩转数据结构 7-4 Leetcode中的集合问题和更多集合相关问题
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13706 1重点关注1.1见代码演练3.1 1.2有序集合和无序集合7-1二叉树实......
  • 编程路-基础提升-第七周-01
    学员管理系统函数的实际应用才能加深对函数的理解。建立一个关于学员的的增减删改的内容。系统功能界面先把信息放进去打印出来看一看有没有问题,美不美观,调整一下......