List子接口 Arraylist【重点】 | 将两个集合合并成一个集合
*List子接口*
特点:有序、有下标、元素可重复
List实现类
Arraylist【重点】
数组结构实现,查询快、增删慢。
Jdk1.2版本,运行效率快、线程不安全。
Vector:
数组结构实现,查询快、增删慢;
Jdk1.0版本,运行效率慢、线程安全
LinkedList:
链表结构实现,增删快,查询慢。
*Arraylist【重点】*
小案例
package com.practise;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* list子接口的使用
* 特点:有序 有下标 可以重复
*/
public class Demo03 {
public static void main(String[] args) {
//创建集合
List arrayList = new ArrayList();
// * 1.添加元素
arrayList.add("apple");
arrayList.add("bananer");
arrayList.add(0,"Durian");//表示榴莲
System.out.println("集合大小===="+arrayList.size());
System.out.println("集合遍历===="+arrayList);//默认重写的toString方法
//2.删除元素
// arrayList.remove("apple");//这种方法是能删除集合中的元素的
// System.out.println("集合大小===="+arrayList.size());
// System.out.println("集合遍历===="+arrayList);//默认重写的toString方法
// //通过下标进行删除
// arrayList.remove(0);
// System.out.println("集合大小===="+arrayList.size());
// System.out.println("集合遍历===="+arrayList);//默认重写的toString方法
System.out.println("=========3.1使用增强for==========");
for (Object o : arrayList) {
String col1=(String) o;
System.out.println(col1);
}
//迭代器是专门用来遍历集合的一种方式
System.out.println("=========3.2使用iterator迭代器==========");
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
String col2 = (String)iterator.next();
System.out.println(col2);
//java.util.ConcurrentModificationException 并发修改异常,也就是说,再遍历集合的时候,是不能够删除集合中的元素的。
//arrayList.remove(col2);
//要想在遍历的时候删除集合中的元素可以使用迭代器提供的删除方法进行删除
// iterator.remove();
}
System.out.println("集合大小===="+arrayList.size());
System.out.println("=========3.3使用普通for循环进行遍历==========");
for (int i = 0; i <arrayList.size() ; i++) {
System.out.println(((ArrayList) arrayList).get(i));
}
//使用列表迭代器,和iterator的区别,listiterator可以向前或者向后遍历,添加、删除、修改元素。
System.out.println("=========3.4使用列表迭代器从前往后遍历==========");
ListIterator listIterator = arrayList.listIterator();
while (listIterator.hasNext()) {
System.out.println(listIterator.nextIndex()+":"+listIterator.next());
}
System.out.println("=========3.4使用列表迭代器从后往前遍历==========");
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previousIndex()+":"+listIterator.previous());
}
//3.5 判断
System.out.println(arrayList.contains("apple"));
System.out.println(arrayList.isEmpty());
//3.6 获取元素在集合中的位置
System.out.println(arrayList.indexOf("Durian"));
System.out.println(arrayList.indexOf("apple"));
}
}
运行结果:
集合大小====3
集合遍历====[Durian, apple, bananer]
=========3.1使用增强for==========
Durian
apple
bananer
=========3.2使用iterator迭代器==========
Durian
apple
bananer
集合大小====3
=========3.3使用普通for循环进行遍历==========
Durian
apple
bananer
=========3.4使用列表迭代器从前往后遍历==========
0:Durian
1:apple
2:bananer
=========3.4使用列表迭代器从后往前遍历==========
2:bananer
1:apple
0:Durian
true
false
0
1
*小案例*
package com.practise;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* list子接口的使用
* 特点:有序 有下标 可以重复
*/
public class Demo04 {
public static void main(String[] args) {
//创建集合
List list = new ArrayList();
// * 1.添加元素(自动装箱,也就是在添加基本数据类型的时候,集合就会将添加的基本数据类型自动转换成该元素对应的包装类)
list.add(20);
list.add(30);
list.add(40);
list.add(50);
list.add(60);
System.out.println("集合大小===="+list.size());
System.out.println("集合遍历===="+list);//默认重写的toString方法
//2.删除元素
//java.lang.IndexOutOfBoundsException: Index: 20, Size: 5 直接写的话是按照下标删除的,所以会报这下标越界的异常
// list.remove(20);//这样写是会报错的
// list.remove((Object)20);//这样写是可以的
// list.remove((Integer)20);//这样写也是可以的
// System.out.println("集合大小===="+list.size());
// System.out.println("集合遍历===="+list);//默认重写的toString方法
//3.获取子集合 subList [ int fromIndex, int toIndex )
List subList = list.subList(1, 3);
System.out.println("集合大小===="+subList.size());
System.out.println("集合遍历===="+subList);//默认重写的toString方法
}
}
运行结果;
集合大小====5
集合遍历====[20, 30, 40, 50, 60]
集合大小====2
集合遍历====[30, 40]
*解决新创建的对象是否在集合中已经存在*
package com.practise;
/**
* 学生类
*/
public class Student{
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
/**
* 重写object类的equals方法
* @param o
* @return
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if(o==null) return false;
//3.判断是否是Student类型
if(o instanceof Student){
Student student = (Student) o;
//比较属性,这个可以自己定义
if(this.name.equals(student.getName())&&this.getAge()==(student.getAge())){
return true;
}
}
return false;
}
public static void main(String[] args) {
System.out.println(0>>1);
}
}
package com.practise;
import java.util.ArrayList;
import java.util.List;
/**
* ArrayList子接口的使用
* 特点:有序 有下标 可以重复
*/
public class Demo05 {
public static void main(String[] args) {
//创建集合
List list = new ArrayList();
// * 1.添加元素(自动装箱,也就是在添加基本数据类型的时候,集合就会将添加的基本数据类型自动转换成该元素对应的包装类)
Student stu1 = new Student("张三", 18);
Student stu2 = new Student("李四", 19);
Student stu3 = new Student("王五", 20);
list.add(stu1);
list.add(stu2);
list.add(stu3);
System.out.println("集合大小===="+list.size());
System.out.println("集合遍历===="+list);//默认重写的toString方法
//2.删除元素
// list.remove(new Student("张三", 18));//必须重写object的equals方法。
// System.out.println("集合大小===="+list.size());
// System.out.println("集合遍历===="+list);//默认重写的toString方法
//3.判断
System.out.println(list.contains(new Student("张三", 18)));//现在就有了 true
//4.查找
System.out.println(list.indexOf(new Student("张三", 18)));//现在就有了 位置为0 第一个
}
}
运行结果:
集合大小====3
集合遍历====[Student{name='张三', age=18}, Student{name='李四', age=19}, Student{name='王五', age=20}]
true
0
//这是使用一种连缀写法的遍历方式
import java.util.ArrayList;
public class B {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("hello1");
list.add("hello2");
list.add("hello3");
list.add("hello4");
//这个item表示的就是集合遍历过程中的单个元素
list.stream().forEach(yyy->{
if(yyy.equals("hello2")){
yyy="hello22222";
//return;
}
System.out.println("============="+yyy);
});
}
}
将两个list集合合并成一个list集合
public abstract class Test<T> {
public static void main(String[] args) {
HashMap<String, Object> map1 = new HashMap<>();
map1.put("a","aa");
map1.put("b","bb");
map1.put("c","cc");
HashMap<String, Object> map2 = new HashMap<>();
map2.put("d","dd");
map2.put("e","ee");
map2.put("f","gg");
ArrayList arrayList1 = new ArrayList();
arrayList1.add(map1);
arrayList1.add(map2);
HashMap<String, Object> map3 = new HashMap<>();
map3.put("g","gg");
map3.put("h","hh");
map3.put("i","ii");
HashMap<String, Object> map4 = new HashMap<>();
map4.put("j","jj");
map4.put("k","kk");
map4.put("l","ll");
ArrayList arrayList2 = new ArrayList();
arrayList2.add(map3);
arrayList2.add(map4);
arrayList2.addAll(arrayList1);
System.out.println(arrayList2);
}
}
运行结果:
[{g=gg, h=hh, i=ii}, {j=jj, k=kk, l=ll}, {a=aa, b=bb, c=cc}, {d=dd, e=ee, f=gg}]
由此可见,进行合并之后,这是一个集合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-01-30 Springmvc框架-json对象的处理
2020-01-30 使用Springmvc框架实现多文件上传(二)
2020-01-30 使用springmvc框架实现多文件上传