当前位置:网站首页>集合之ArrayList
集合之ArrayList
2022-04-21 18:01:00 【RhineHe_hjs】
集合之ArrayList
集合 VS 数组
1、数组声明后只能存放同一种数据类型,而集合可以存放不同的数据类型
2、数组声明后,长度便固定了,而集合长度是可变的
3、数据可以存放计本数据类型和引用数据类型,集合只能存放引用数据类型,要想集合能放基本数据类型可以转为相应的包装类数据类型。
ArrayList
首先我们来了解一下ArrayList,它是一个可变长的集合,当指针等于数组的长度时,集合自动扩容至原来的1.5倍,初始长度是10,是一个线程不安全的一维数组的数据结构,并且它是有序,可使用索引访问、元素可重复的集合。
ArrayList的创建
ArrayList list = new ArrayList();
ArrayList<Object> arrayList = new ArrayList<>();
创建ArrayList有两种创建方法,一种是无泛型的,如以上第一种,它可以存放任意数据类型;还有一种就是有泛型的,如第二种,在尖括号类写你要规定的类型,比如Integer、String、以及自定义数据类的数据类型,如Student、Car、Teacher、Worker等等,当规定了泛型之后,你定义的这个集合就只能存放一种数据类型。
添加元素
这里是使用无泛型的集合。可以添加任意数据类型
list.add("小红帽");
list.add(666);//自动装箱Integer.valueOf(666);
list.add('M');//自动装箱Character.valueOf('M');
list.add(false);//自动装箱Boolean.valueOf(false);
list.add('M');
list.add("小红帽");
list.add(1, "欧阳娜拉");//指定下标上增加
Collections.addAll(list, "王力宏","王丽坤","王宝强","王源");//利用集合工具类批量添加
- 获取集合长度
System.out.println("集合长度:"+list.size());
- 获取元素与下标
System.out.println("下标为1的元素是:"+list.get(1));
System.out.println("获取对应元素的第一个下标:"+list.indexOf('M'));
System.out.println("获取对应元素的最后一个下标:"+list.lastIndexOf('M'));
- 删除元素
System.out.println("根据下标删除元素:"+list.remove(4));
System.out.println("根据元素删除,成功返回true,失败返回false:"+list.remove(false));
使用泛型的集合可以使用过滤器删除
System.out.println("根据过滤器删除元素:");
list2.removeIf(new Predicate<String>() {
@Override
public boolean test(String str) {
// TODO Auto-generated method stub
if(str.equals("小红帽")) {
return true;
}
return false;
}
});
遍历结合
- 普通for循环遍历
System.out.println("第一种方式:for循环");
for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
}
2.增强for循环遍历
System.out.println("第二种遍历,增强for循环,foreach");
for (Object object : list2) {
System.out.println(object);
}
- 迭代器遍历
System.out.println("第三种遍历方式,迭代器");
Iterator it2 =list2.iterator();
while(it2.hasNext()) {
System.out.println(it2.next());
}
测试所写代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.function.Predicate;
public class MyArrayListTest {
public static void main(String[] args) {
/* * ArrayList基本使用1,不加泛型,可以存储任何数据类型(基本数据类型直接自动装箱) */
ArrayList list = new ArrayList();
list.add("小红帽");
list.add(666);//自动装箱Integer.valueOf(666);
list.add('M');//自动装箱Character.valueOf('M');
list.add(false);//自动装箱Boolean.valueOf(false);
list.add('M');
list.add("小红帽");
list.add(1, "欧阳娜拉");//指定下标上增加
Collections.addAll(list, "王力宏","王丽坤","王宝强","王源");//利用集合工具类批量添加
System.out.println("集合长度:"+list.size());
System.out.println("下标为1的元素是:"+list.get(1));
System.out.println("获取对应元素的第一个下标:"+list.indexOf('M'));
System.out.println("获取对应元素的最后一个下标:"+list.lastIndexOf('M'));
System.out.println("根据下标删除元素:"+list.remove(4));
System.out.println("根据元素删除,成功返回true,失败返回false:"+list.remove(false));
//遍历
//第一种方式:for循环
System.out.println("第一种方式:for循环");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//第二种遍历,增强for循环,foreach
System.out.println("第二种遍历,增强for循环,foreach");
for (Object object : list) {
System.out.println(object);
}
//第三种遍历方式,迭代器
System.out.println("第三种遍历方式,迭代器");
Iterator it =list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
// 增加泛型,可以使用过滤器删除元素,迭代器删除指定元素将会删除集合中所有该元素
ArrayList<String>list2 =new ArrayList<>();
list2.add("小红帽");
list2.add("田馥甄");
list2.add("林俊杰");
list2.add("佟丽娅");
list2.add("迪丽热巴");
list2.add("冯绍峰");
list2.add(1, "欧阳娜拉");
//批量添加
list.addAll(list2);
System.out.println("通过批量添加list2后的list:"+list.toString());
System.out.println("根据过滤器删除元素:");
list2.removeIf(new Predicate<String>() {
@Override
public boolean test(String str) {
// TODO Auto-generated method stub
if(str.equals("小红帽")) {
return true;
}
return false;
}
});
//遍历
//第一种方式:for循环
System.out.println("第一种方式:for循环");
for (int i = 0; i < list2.size(); i++) {
System.out.println(list2.get(i));
}
//第二种遍历,增强for循环,foreach
System.out.println("第二种遍历,增强for循环,foreach");
for (Object object : list2) {
System.out.println(object);
}
//第三种遍历方式,迭代器
System.out.println("第三种遍历方式,迭代器");
Iterator it2 =list2.iterator();
while(it2.hasNext()) {
System.out.println(it2.next());
}
}
}
提示
以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论!
版权声明
本文为[RhineHe_hjs]所创,转载请带上原文链接,感谢
https://blog.csdn.net/yigan123/article/details/106673670
边栏推荐
- Mp40n120-asemi FET
- Linux~libc.so.6(GLIBC_2.28)(64bit) 被 redis-5.0.3-1.nfs.x86_64 需要
- Overview: the future of CFD
- mysql查询表字段默认值
- What is ODBC – open database connectivity
- Shell programming learning (III) condition judgment and process control
- [刷力扣] 51-60题
- 做自媒体副业真能月入上万?这篇分享,不藏私
- 还剩下载次数,可留链接+邮箱
- LogStash~LogStash的filter(过滤)
猜你喜欢

Vulnerability detection and defense: redis unauthorized access vulnerability recurrence

Beijing quasi GPS Beidou satellite timing system helps South Asia electronic production management system

Fonctions communes pour MySQL Advanced
![[7:00 pm tonight] discussion on the development and application scenarios of metartc](/img/58/965e9bd295e34c4b37cd00aada2120.jpg)
[7:00 pm tonight] discussion on the development and application scenarios of metartc

Oceanbase 和 TiDB 粗浅对比之 - 执行计划

【acwing】165. 小猫爬山(DFS之剪枝)

为什么switch里的case没有break不行

吃了这个开源小玩意让单片机开发和Arduino一样高效

京准GPS北斗卫星校时系统助力南亚电子生产管理系统

上位机这样玩,才有意思!
随机推荐
动态规划:硬币题目总结
SPI ServiceLoader. Load () does not take effect
Logstash ~ logstash command line optional parameters
Google has been unable to collect the transformation target on the mobile terminal. What's the matter?
SPI ServiceLoader.load()不生效
AI + clinical trial | Bayer exploration creates "virtual" control group
LogStash~LogStash命令行可选参数
Small fuzzy query, unexpectedly modified the code three times back and forth? Find an electronics factory
Headline we media operation secret script. If you stick to it, you can beat 90% of the people
Chest X-ray images - dataset
Shell programming learning (III) condition judgment and process control
LogStash~LogStash的配置文件
【acwing】166. 数独****(DFS)
New ETL scheduling batch management tool taskctl 8.0 simplest installation
国泰君安安全吗?靠谱嘛
autoware.auto高精地图 Lanelet2资料汇总
Why do infrastructure engineers prefer MySQL?
【最佳实践】巡检项:对象存储(COS)存储桶公有读写
【AI与食品】北工商中科院计算所最新《基于视觉分析的膳食评估》综述性论文
mysql8.0设置忽略大小写后无法启动