集合

文章目录

  • 集合
    • 概述
    • Arraylist
    • ArrayList 的常用api,遍历
    • ArrayList集合案例:

数组长度固定,类型确定,并且惊醒增删改的操作不方便。不确定大小的无法完成操作。

即引入集合。

概述

集合大小不固定,启动后可以动态改变,类型可以选择不固定

集合非常适合做元素个数不确定,且要进行增删操作的业务场景

集合提供了许多好用的功能,而数组的功能很单一

1.数组和集合元素存储的个数问题?

数组定义后类型确定,长度固定

集合类型可以不固定,大小是可变的

2.数组和集合的使用场景

  • 数组适合数组个数和类型确定的场景
  • 集合适合做数据个数不确定,且要做增删元素的场景
Arraylist

1.Arraylist是集合中的一种,它支持索引

ArrayList集合的对象获取

public Arraylist() 创建一个空的集合对象

Arraylist集合添加元素的方法

public boolean add(E e)将指定元素追加到此集合的末尾public void add(int index,E element)   在此集合中的指定位置插入指定的元素

总结:

Arraylist类如何创建集合对象,如何添加元素?

ArrayList list=new ArrayList();

list.add()方法区给集合添加元素

2.ArrayList对于泛型的支持

泛型概述

ArrayList:其实就是一个泛型类、

ArrayList<String> list=new ArrayList<String>();//从jdk1.7之后就可以不写后面的
ArrayList<Integer> list=new ArrayList<>();

在定义集合的时候,用泛型去定义,是一种标椎.

ArrayList 的常用api,遍历
获取集合中的某个元素 public E get(int index)获取集合的大小,元素个数 public int size()集合的遍历for(int i=0;i<list.size();i++){System.out.println(list.get(i));
}根据索引删除某个元素处的元素值,并返回删除的元素 public E remove(int index)直接删除元素值返回值为boolean类型,public boolean remove(Object o),当删除的元素在集合中有多个时,默认删除第一次出现的元素修改某个索引位置处的元素  public E set(int intdex,E element),返回修改前的值
ArrayList集合案例:

需求:

某个班级在系统上考试,成绩大致为:98,77,66,89,79,50,100

现在需要把成绩低于80分以下的数据去掉

  ArrayList<Integer> list=new ArrayList<>();list.add(98);list.add(77);list.add(66);list.add(89);list.add(79);list.add(50);list.add(100);for(int i=0;i<list.size();i++){int score=   list.get(i);
if(score<80){list.remove(i);}}System.out.println(list);
结果:[98, 66, 89, 50, 100]并没有把小于80分的删除完成,为什么?因为集合是一个可变的,在删除之后,集合产生了变化,例如:产出77后66 会向前加一位而i也会加一位,则会跳过66,进而会直接到下一个数。怎样去改呢?解决方法一:在删除之后加入i--即可ArrayList<Integer> list=new ArrayList<>();list.add(98);list.add(77);list.add(66);list.add(89);list.add(79);list.add(50);list.add(100);for(int i=0;i<list.size();i++){int score=   list.get(i);if(score<80){list.remove(i);i--;}}System.out.println(list);
解决方法二:倒叙遍历for(int i=list.size()-1;i>=0;i--){int score=list.get(i);if(score<80){list.remove(i);}}System.out.println(list);

Arraylist存储自定义对象

需求:某影院系统需要在后台存储上述三部电影,然后一次展示出来

Movie n1=new Movie("《肖生克的救赎》",9.7,"罗冰丝");
Movie n2=new Movie("《少年的你》",9.8,"易烊千玺");
Movie n3=new Movie("《送你一朵小红花》",9.4,"易烊千玺");
ArrayList<Movie> list=new ArrayList<>();
list.add(n1);
list.add(n2);
list.add(n3);
for(int i=0;i<list.size();i++){Movie m=list.get(i);System.out.println("电影名称"+m.getName());System.out.println("电影评分"+m.getScore());System.out.println("电影演员"+m.getActor());System.out.println("=======================");
}

集合中存储的元素并不是对象本身,而是对象的地址

ArrayList集合案例:元素搜索

需求:后台程序需要存储如上学生信息,然后要提供按照学号搜索学生信息的功能

分析:

Student类

提供一个方法,可以接受Arraylist集合,和要搜索的学生学号,返回搜索到的学生对象,并展示

使用死循环,让用户可以不停的去搜索。

public class Student {private  String studyNumber;private String name;private int age;private String className;public Student() {}public Student(String studyNumber, String name, int age, String className) {this.studyNumber = studyNumber;this.name = name;this.age = age;this.className = className;}public String getStudyNumber() {return studyNumber;}public void setStudyNumber(String studyNumber) {this.studyNumber = studyNumber;}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;}public String getClassName() {return className;}public void setClassName(String className) {this.className = className;}
}
public static void main(String[] args) {//定义学生类//创建学生对象,封装学生对象//ArrayList<Student> student=new ArrayList<>();student.add(new Student("20180302","陈锐",22,"计算机一班"));student.add(new Student("20180303","陈晨",23,"计算机一班"));student.add(new Student("20180304","陈小",19,"计算机一班"));student.add(new Student("20180305","陈da",20,"计算机一班"));for(int i=0;i<student.size();i++){Student s=student.get(i);System.out.println(s.getStudyNumber()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassName());}while (true){Scanner scanner=new Scanner(System.in);System.out.println("请输入要找的学生学号");String str=scanner.next();Student student1= getStudentById(student,str);if(student1==null){System.out.println("对不起,查无此人");}else{System.out.println("您查询的学生信息如下:");System.out.println(student1.getStudyNumber()+"\t"+student1.getName()+"\t"+student1.getAge()+"\t"+student1.getClassName());}}}
//通过学号去找学生对象/*** 根据学生学生查询学生* @param student 存储全部学生的集合* @param studentNumber 搜索学生的学号* @return*/
public static Student getStudentById(ArrayList<Student> student,String studentNumber){for (int i = 0; i < student.size(); i++) {Student s=student.get(i);if(s.getStudyNumber().equals(studentNumber)){return s;}}return null;
}Student getStudentById(ArrayList<Student> student,String studentNumber){for (int i = 0; i < student.size(); i++) {Student s=student.get(i);if(s.getStudyNumber().equals(studentNumber)){return s;}}return null;
}

集合之ArrayList相关推荐

  1. Java集合系列之四大常用集合(ArrayList、LinkedList、HashSet、HashMap)的用法

    Java集合系列之四大常用集合(ArrayList.LinkedList.HashSet.HashMap)的用法 ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是A ...

  2. arraylist转int数组_深度剖析Java集合之ArrayList

    一. ArrayList 初识 ArrayList是集合的一种实现,实现了接口List,List接口继承了Collection接口. ArrayList 是java 中最常用的集合类型,这是因为它使用 ...

  3. 16.集合框架(ArrayList,Vector,LinkedList,泛型(Generic),可变参数,增强for循环)

    1.ArrayList存储字符串并遍历 JDK1.8新增的一个方法也能遍历集合 void forEach(Consumer<? super E> action) 执行特定动作的每一个元素的 ...

  4. HashMap集合 嵌套ArrayList集合

    开发工具与关键技术: IDEA 撰写时间:2022/5/17 HashMap集合 嵌套ArrayList集合 首先创建一个HashMap集合,HashMap的键值对分别为String和ArrayLis ...

  5. 从源码看Java集合之ArrayList

    Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...

  6. 常用类之集合:ArrayList类

    ArrayList类 数组有一个缺点:一旦创建,程序运行期间长度不可以发生改变. 但是ArrayList类出现解决了这一问题! 数组的长度不可以发生改变. 但是ArrayList集合的长度是可以随意变 ...

  7. Java集合干货——ArrayList源码分析

    前言 在之前的文章中我们提到过ArrayList,ArrayList可以说是每一个学java的人使用最多最熟练的集合了,但是知其然不知其所以然.关于ArrayList的具体实现,一些基本的都也知道,譬 ...

  8. Java集合之ArrayList源码解析

    下面我们来看看ArrayList的底层实现, ArrayList继承了AbstractList,实现Cloneable.Serializable.RandomAccess接口, 它的成员属性有Obje ...

  9. 1.3 List集合:ArrayList和LinkedList类的用法及区别

    List集合: List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引. List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 集合默认按元素的添加顺序设置 ...

  10. Java集合之ArrayList

    ArrayList ArrayList是最常见以及每个Java开发者最熟悉的集合类了,顾名思义,ArrayList就是一个以数组形式实现的集合,以一张表格来看一下ArrayList里面有哪些基本的元素 ...

最新文章

  1. 2022-2028年中国抗肿瘤药物行业市场分析调研及发展趋势研究报告
  2. 重磅 | 2017年深度学习优化算法研究亮点最新综述火热出炉
  3. Jquery源码分析之匿名函数的自执行
  4. 字符串中连续出现最多的子串 amp; 字符串中最长反复子串
  5. 在python中字符串可以使用什么来表示_Python 字符串定义
  6. Android中的Handler, Looper, MessageQueue和Thread
  7. python安装anaconda ubuntu_Ubuntu 16.4 安装anaconda 详细教程
  8. linux 使用expect 实现自动登录
  9. AT3 two-dimensional surfaces : the sphere
  10. 190817每日一句
  11. centos7播放MP4视频需要MPEG-4 AAC解码器,和H.264(High profile) 解码器
  12. 软件加密狗破解思路和方法
  13. 计算机的奇迹英语作文,高中英语作文范文:奇迹
  14. 【电路理论】2-6 线性电阻电路解答的存在性与惟一性定理
  15. 关于AD19常用功能和使用技巧的总结
  16. linux下的go富集分析,GO富集分析示例【华为云技术分享】
  17. 腾讯音乐知识图谱搜索实践
  18. html列表ppt,HTML教程列表与表格.ppt
  19. 中职计算机师德范文,计算机教师师德师风心得体会
  20. 在故事板中加载 nib 时 IBOutlet 为 nil

热门文章

  1. Python读取医学图象nii格式数据进行裁剪,并保存
  2. 信号与系统笔记05:连续时间信号与系统复频域分析
  3. php企业网站设计目的,php单位企业网站设计
  4. 区间dp 石子合并 切木条等 持续更新ing
  5. adb命令获取手机信息
  6. 好一首“北京欢迎你”!!!!!
  7. python转义字符 n的含义是_第二课和我一起零基础学Python今天讲转义字符\n
  8. 特征向量的物理意义几何含义
  9. Android学习笔记 四七 Content Provider初谈和Android联系人信息
  10. Linux内核性能限制,Linus Torvalds:Linux 4.20内核性能明显下降后,Spectre v2补丁需要限制...