集合
1. 概念: 存储多个不同引用数据类型的数据,可变长度,同时定义很多操作方法。
2. 集合和数组
1.数组长度固定,集合长度不固定、
2.数组可以存基本数据类型和引用数据类型数据
3. 集合只存储引用数据类型数据
3. 不同的业务,使用不同类型的集合存储数据
4. Colletion接口
两个子接口 List Set
提供一些方法,集合中添加、删除元素等等的操作
5. List接口
存储一组不唯一,有序的对象数据
List 接口有两个实现类 ArrayList LinkedList
ArrayList 是一个用数组实现的集合、非线程安全、动态数组的数据结构 (下标 ) 适用于遍历数据
LinkedList 是一个双向链表、非同步(如果多个线程同时访问一个List,必须实现访问同步)、基于双向链表的数据结构 适用于插入删除
6. 创建ArrayList集合
ArrayList stus=new ArrayList();
List stus2=new ArrayList();
List<Integer> nums=new ArrayList<>();//使用泛型方式
添加元素
Student stu1=new Student("1001","小红","女");
Student stu2=new Student("1002","小明","男");
Student stu3=new Student("1003","小丽","女");
//创建集合
ArrayList stus=new ArrayList();
List stus2=new ArrayList();
List<Integer> nums=new ArrayList<>();//使用泛型方式
//添加元素
nums.add(12);
nums.add(23);
nums.add(44);
nums.add(2);
//nums.add("dd");//The method add(Integer) in the type List<Integer> is
not applicable for the arguments (String)
//存储不同的引用数据类型
stus2.add(12);
stus2.add(7.8);
stus2.add("你好");
stus2.add(stu3);
集合中方法
//元素个数
System.out.println(stus.size());
//集合元素是否为null遍历集合
删除集合中元素出现问题
使用for-each循环遍历集合,遍历过程中对集合进行删除操作,因此出现异常
java.util.ConcurrentModificationException
解决问题
使用迭代器方式
System.out.println(stus.isEmpty());
//获取集合中元素
System.out.println(stus.get(0));
//删除集合中元素
Student student=stus.remove(0);//删除第一个位置,返回删除元素的内容
System.out.println(student);//Student [stuNo=1001, stuName=小红, sex=女]
boolean sign=stus.remove(stu2);//删除某一个对象,返回是否删除成功
System.out.println(sign);//true
遍历集合
//下标
for (int i = 0; i < stus.size(); i++) {
System.out.println(stus.get(i));
}
//for-each
for (Student s : stus) {
System.out.println(s);
}
//清空集合中所有元素
stus.clear();
//修改集合中的元素
stus.set(1, stu1);//java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
//根据位置进行更改集合元素
//stus.set(0, stu1);
//截取集合
List<Student> newList=stus.subList(1,2);
除集合中元素出现问题
使用for-each循环遍历集合,遍历过程中对集合进行删除操作,因此出现异常
java.util.ConcurrentModificationException
解决问题
使用迭代器方式
//使用迭代器方式
Iterator<String> its=list.iterator();
while(its.hasNext()){//hasNext 判断下一位是否有元素
String str=its.next();//next() 获取当前元素
if(str.equals("elice")){
its.remove();
}
}
7. LinkedList
Student stu1=new Student("1001","小红","女");
Student stu2=new Student("1002","小明","男");
Student stu3=new Student("1003","小丽","女");
LinkedList<Student> stus=new LinkedList<>();
stus.add(stu1);
stus.add(stu2);
stus.add(stu3);
for (int i = 0; i < stus.size(); i++) {
System.out.println(stus.get(i));
}
System.out.println("-------------------------");
//stus.addFirst(stu3);//在集合第一个位置上添加元素
//stus.addLast(stu1);//在集合最后一个位置上添加元素
//stus.removeFirst();//删除集合中第一个位置元素
System.out.println("第一位上元素"+stus.getFirst());
System.out.println("最后一位上元素"+stus.getLast());
for (Student student : stus) {
System.out.println(student);
}
模拟堆栈
LinkedList<String> list=new LinkedList<>();//构建空栈
// list.push("A");//使用堆栈的方式存入集合中
// list.push("B");
// list.push("C");
//
// for (String string : list) {
// System.out.print(string+"\t");//C B A
// }
list.add("A");//使用队列的方式存入集合中
list.add("B");
list.add("C");
for (String string : list) {
System.out.print(string+"\t");//A B C
}