【JAVA入门】Day07 - ArrayList

2024-06-11 22:12
文章标签 java 入门 arraylist day07

本文主要是介绍【JAVA入门】Day07 - ArrayList,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【JAVA入门】Day07 - ArrayList


文章目录

  • 【JAVA入门】Day07 - ArrayList
    • 一、ArrayList 的创建
    • 二、ArrayList的成员方法
      • 2.1 ArrayList的基本操作
      • 【补充】基本数据类型的包装类


        集合看似与数组有密不可分的关系,但是集合和数组有两个非常明显的区别。

  • 其一,数组的长度是固定的,而集合的长度是可变的。
  • 其二,数组既可以存基本数据类型,又可以存引用数据类型;但是集合只能存储引用数据类型。

        集合在 Java 编程中有着非常重要的作用,Java 内置了很多种不同的集合,我们以最常用的集合 ArrayList 为引入,逐步拉开集合的幕布。

一、ArrayList 的创建

        ArrayList 是一个类,但是它的对象在创建时,引入了全新的概念——“泛型”

ArrayList<String> list = new ArrayList<String>();

        如上所示,尖括号中的内容就是对这个集合能存储的数据类型的一种限定,上面这个集合只能存储字符串类型的元素。注意:ArrayList<String>是一个整体。
        在 JDK7 以后,为了写起来省事,后方的尖括号内容可以省略,但是尖括号不能省。

ArrayList<String> list = new ArrayList<>();

        要打印 ArrayList ,也可以直接用 sout,此时会把集合中所有的数据用中括号包住打印出来,如果是空 ArrayList,则会打印 [ ] 。

ArrayList<String> list = new ArrayList<>();
System.out.println(list);   // []

二、ArrayList的成员方法

        主要用到的有增、删、改、查。

方法名说明
boolean add(E e)添加元素,返回值表示是否添加成功
boolean remove(E e)删除指定元素,返回值表示是否删除成功
E remove(int index)删除指定索引的元素,返回被删除的元素
E set(int index,E e)修改指定索引下的元素,返回原来的元素
E get(int index)获取指定索引的元素
int size()集合的长度,也就是集合中元素的个数

2.1 ArrayList的基本操作

        利用上面的方法,可以实现 ArrayList 的基本操作。

//1.创建一个集合
ArrayList<String> list = new ArrayList<>();//2.添加几个元素
list.add("aaa");
list.add("bbb");
list.add("ccc");System.out.println(list);//3.删除元素
/* boolean result1 = list.remove("aaa");
System.out.println(result1);	//true
boolean result2 = list.remove("ddd");
System.out.println(result2);	//false *///3.1 根据索引删除元素,还能返回被删除的元素
String str = list.remove(0);
System.out.println(str);	//aaa//4.修改元素
list.set(1, "ddd");
System.out.println(list);  // aaadddccc//5.查询元素
/* String s = list.get(0);
System.out.println(s); *///遍历
for (int i = 0; i < list.size(); i++) {//i 索引//list.get(i) 元素String str = list.get(i);System.out.println(str);
}

1.集合的遍历1
需求:定义一个集合,添加字符串,并进行遍历。遍历格式参照——[元素1, 元素2, 元素3]。

public class Test1 {public static void main(String[] args) {//1.创建集合ArrayList<String> list = new ArrayList<>();//2.添加字符串list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");//3.遍历System.out.print("[");for(int i = 0; i < list.size(); i++) {if(i == list.size() - 1) {System.out.print(list.get(i));}else{System.out.print(list.get(i) + ", ");}}System.out.print("]");}
}

2.集合的遍历2
需求:定义一个集合,添加数字,并进行遍历。遍历格式参照——[元素1, 元素2, 元素3]。

public class Test2 {public static void main(String[] args) {//1.创建集合ArrayList<Integer> list = new ArrayList<>();//2.添加字符串list.add(1);list.add(2);list.add(3);list.add(4);//3.遍历System.out.print("[");for(int i = 0; i < list.size(); i++) {if(i == list.size() - 1) {System.out.print(list.get(i));}else{System.out.print(list.get(i) + ", ");}}System.out.print("]");}
}

【补充】基本数据类型的包装类

        在 Java 中,基本数据类型都有一个对应的包装类。因为一个集合只能添加引用类型的元素,这个时候基本数据类型就不能直接用 add() 函数添加了,但是我们可以在<>中指定这些数据类型对应的包装类进行添加。

基本数据类型对应的包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
ArrayList<Character> list = new ArrayList<>();
list.add('a');
list.add('b');
list.add('c');

3.集合的遍历3
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。

public class Student {//1.私有化成员变量//2.空参构造方法//3.带全部参数的构造方法//4.set/get方法private String name;private int	age;public Student() {}public Student(String name, int age) {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;}public class Test3 {public static void main(String[] args) {//1.创建集合ArrayList<Student> list = new ArrayList<>();//2.创建学生对象Student s1 = new Student("zhangsan", 23);Student s2 = new Student("lisi", 23);Student s3 = new Student("wangwu", 25);}//3.添加元素list.add(s1);list.add(s2);list.add(s3);//4.遍历集合for(int i = 0; i < list.size(); i++) {Student stu = list.get(i);  // 由于是我们自己定义的对象,不能直接println,所以手写一下输出System.out.println(stu.getName() + ", " + stu.getAge());}

4.集合的遍历4
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。(要求键盘录入)

public class Student {//1.私有化成员变量//2.空参构造方法//3.带全部参数的构造方法//4.set/get方法private String name;private int	age;public Student() {}public Student(String name, int age) {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;}public class Test4 {public static void main(String[] args) {//1.创建集合ArrayList<Student> list = new ArrayList<>();//2.键盘录入学生信息创建对象并添加到集合中Scanner sc = new Scanner(System.in);for(int i =0; i < 3; i++) {Student s = new Student();System.out.println("请输入第" + (i+1) + "位学生的姓名");String name = sc.next();System.out.println("请输入第" + (i+1) + "位学生的年龄");int age = sc.nextInt();//把name和age赋值给学生对象s.setName(name);s.setAge(age);//把学生对象添加到集合中list.add(s);}//4.遍历集合for(int i = 0; i < list.size(); i++) {Student stu = list.get(i);  // 由于是我们自己定义的对象,不能直接println,所以手写一下输出System.out.println(stu.getName() + ", " + stu.getAge());}

5.添加用户对象并判断是否存在
需求:main方法定义一个集合,存入三个用户对象。用户属性:id, username, password。定义一个方法,根据 id 查找对应的用户信息,如果存在返回 true,如果不存在,返回 false。

public class User {//1.私有化成员变量//2.空参构造方法//3.带全部参数的构造方法//4.set/get方法private int id;private String username;private String password;public User() {}public User(int id, String username, String password) {this.id = id;this.username = username;this.password = password;}public int getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}public class Test5 {public static void main(String[] args) {ArrayList<User> list = new ArrayList<>();User u1 = new User(1, "zhangsan", "123456");User u2 = new User(2, "lisi", "aaabbbccc");User u3 = new User(3, "wangwu", "hahahahah");list.add(u1);list.add(u2);list.add(u3);Scanner sc = new Scanner(System.in);int id = sc.nextInt();boolean result = contains(list, id);System.out.println(result);}public static boolean contains(ArrayList<User> list, int id) {for(int i = 0; i < list.size(); i++) {if(list.get(i).getId() == id) {return true;}return false;}}
}

5.5 添加用户对象并判断是否存在(根据索引)
需求:main方法定义一个集合,存入三个用户对象。用户属性:id, username, password。定义一个 getIndex() 方法,根据 id 查找对应的用户信息,如果存在返回其索引值,如果不存在返回 -1。利用 getIndex() 方法复写 contains() 方法。

public class Test6 {public static void main(String[] args) {ArrayList<User> list = new ArrayList<>();User u1 = new User(1, "zhangsan", "123456");User u2 = new User(2, "lisi", "aaabbbccc");User u3 = new User(3, "wangwu", "hahahahah");list.add(u1);list.add(u2);list.add(u3);Scanner sc = new Scanner(System.in);String id = sc.next();boolean result = contains(list, id);System.out.println(result);}public static int getIndex(ArrayList<User> list, String id) {for(int i = 0; i < list.size(); i++) {User u = list.get(i)String uid = u.getId();if(uid.equals(id)) {return i;}}return -1;}public static boolean contains(ArrayList<User> list, String id) {//利用getIndex()方法复写contains()方法if(getIndex(list, id) >= 0){return true;}else{return false;}}
}

6.添加手机对象并返回要求的数据。
需求:定义 JavaBean 类:Phone。属性:品牌,价格。main 方法中定义一个集合,存入3个手机对象,分别为:“小米”,1000;“苹果”,8000;“锤子”,2999。定义一个方法,将价格低于3000的手机信息返回。

public class Phone {private String band;private int price;public Phone() {}public Phone(String band, int price) {this.band = band;this.price = price;}public static void setBand(String band) {this.band = band;}public static String getBand() {return band;}public static void setPrice(int price) {this.price = price;}public static int getPrice() {return price;}
}public class Test7 {public static void main(String[] args) {ArrayList<Phone> list = new ArrayList<>();Phone p1 = new Phone("小米", 1000);Phone p2 = new Phone("苹果", 8000);Phone p3 = new Phone("锤子", 2999);list.add(p1);list.add(p2);list.add(p3);ArrayList<Phone> phoneInfoList = getPhoneInfo(list);for(int i = 0; i < phoneInfoList.size(); i++) {Phone phone = new Phone();System.out.println(phone.getBand()+ ", " + phone.getPrice());}}public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) {ArrayList<Phone> resultlist = new ArrayList<>();for(int i = 0; i < list.size(); i++) {Phone p = list.get(i);int price = p.getPrice();if(price < 3000) {//System.out.println(p.getBand()+ ", " + p.getPrice());resultlist.add(p);}}}
}

这篇关于【JAVA入门】Day07 - ArrayList的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052396

相关文章

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进