集合
集合的作用:存储数据
变量 数组
数组的优缺点:
优点:
1. 可以存储多个同类型元素
2. 存储地址连续
缺点:
1. 初始化之后,长度不可变
2. 只能存储同种元素
3. 数组存储数据有限
从操作的角度来说:数组的 添加 和 删除 效率低,查找的效率比较高。
面向对象思想编程的核心是什么?
1 类的设计
2 对象的创建以及对象的相互调用
集合的特点:
1. 长度不限
2. 只可以存储对象
3. 元素可以是有序或无序
4. 元素可以单列,也可以是有映射关系的双列
5. 可以对存储在其中的元素进行比较
集合的结构
collection
collection是集合的跟接口,集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许
常用方法
Collection的基本操作
public class CollectionDemo {
public static void main(String[] args) {
// 创建集合
Collection c = new ArrayList();
// 1. 添加元素:元素只能是对象
c.add(1); // 此处存储的是基本类型的包装类
c.add("Java");
c.add(true);
c.add(23.3);
// c.clear(); // 清空集合中所有元素
// 判断集合中是否包含某个元素
boolean b = c.contains("Java");// 区分大小写
System.out.println(b);
// 判断集合是否为空
boolean b1 = c.isEmpty();
System.out.println(b1);
// 从集合中移除某一元素
c.remove(true);
// 获取集合中元素的个数
int a = c.size();
System.out.println(a);
// 2. 集合的遍历
Object[] obj = c.toArray();
// 2.1 普通for循环
for (int i = 0 ; i < obj.length ; i++){
System.out.println(obj[i]);
}
// 2.2 foreach(增强for)
// for(Object o : c){
// System.out.println(o);
// }
}
}
Collection高级操作
public class CollectionDemo2 {
public static void main(String[] args) {
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("Java");
c1.add("HTML");
c1.add("CSS");
c1.add("JS");
c2.add("spring");
c2.add("springmvc");
c2.add("cloud");
//c1.addAll(c2); // 将c2中的每一个元素作为独立的个体,添加到c1中
System.out.println(c1.containsAll(c2));// c1中是否包含c2的所有元素
// c1.removeAll(c2); // 从c1中移除c2中的所有元素
c2.add("Java");
c2.add("JS");
c1.retainAll(c2); // 取c1和c2的交集,并保留在c1中
Object[] arr = c1.toArray();
for (int i = 0 ; i < arr.length ; i++){
System.out.println(arr[i]);
}
}
}
迭代器
public class CollectionDemo2 {
public static void main(String[] args) {
Collection c1 = new ArrayList();
Collection c2 = new ArrayList();
c1.add("java");
c1.add("HTML");
c1.add("CSS");
c1.add("JS");
c2.add("spring");
c2.add("springmvc");
c2.add("cloud");
c1.addAll(c2);//将c2中的每一个元素作为独立的个体添加到c1中
c2.add("java");
c2.add("js");
//使用迭代器来迭代遍历集合
// if(iter.hasNext()){
// Object obj = iter.next();
// System.out.println(obj);
// }
// if(iter.hasNext()){
// Object obj = iter.next();
// System.out.println(obj);
// }
// for(Iterator iter = c1.iterator();iter.hasNext();){
// Object obj = iter.next();
// System.out.println(obj);
// }
//一般常用while来进行迭代
Iterator iter = c1.iterator();
while(iter.hasNext()){
Object obj = iter.next();
System.out.println(obj);
}
}
}
Iterator iter = c1.iterator();
while(iter.hasNext()){
Object obj = iter.next();
c1.remove("java");//在迭代的过程中,通过集合对象修改集合的元素
System.out.println(obj);
}
会出现并发修改异常
使用Collection保存自定义对象
public static void main(String[] args) {
Collection collection = new ArrayList();
Student stu1 =new Student("张三",22);
Student stu2 = new Student("李四",20);
collection.add(stu1);
collection.add(stu2);
//使用迭代器来迭代
Iterator iter = collection.iterator();
while(iter.hasNext()){
Object obj = iter.next();
System.out.println(obj);
}
}
迭代器图示
List
有序集合(也称为序列 )。该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。
list的特点
1. 元素有序
2. 元素可以重复
方法
List集合的有序:元素的迭代顺序和添加顺序是一致的
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(3);
list.add(2);
list.add(0);
Iterator iter = list.iterator();
while(iter.hasNext()){
Object obj = iter.next();
System.out.println(obj);
}
}
List中的元素是可重复的,并且可以保存null值 且可以保存多个null
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(3);
list.add(2);
list.add(0);
list.add(1);
list.add(2);
list.add(null);
list.add(null);
Iterator iter = list.iterator();
while(iter.hasNext()){
Object obj = iter.next();
System.out.println(obj);
}
}
添加、获取、查找的方法
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(3);
list.add(2);
list.add(0);
list.add(1);
list.add(2);
list.add(null);
list.add(null);//add方法是将元素添加到集合的末尾
list.add(2,"java");//在2号位置添加元素
List list1 = new ArrayList();
list1.add("html");
list1.add("css");
//list.addAll(list1);//将list1中的元素添加到list的末尾
list.addAll(5,list1);
for(int i = 0 ; i <list.size();i++){
System.out.println(list.get(i));// 获取集合指定位置的元素
}
System.out.println("------------------------");
//indexOf(Object o)
//返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
System.out.println(list.indexOf(1));//从前往后 查找元素第一次出现的 索引
System.out.println(list.indexOf(10));
System.out.println(list.lastIndexOf(1));//从后往前 查找元素第一次出现的索引 索引的计数是从前往后的
//set(int index, Eelement)
//用指定的元素(可选操作)替换此列表中指定位置的元素
list.set(2,"spring");// 修改指定位置的元素为传入的新元素
System.out.println("------------------------");
Iterator iter = list.iterator();
while(iter.hasNext()){
Object obj = iter.next();
System.out.println(obj);
}
System.out.println("------------------------");
//subList(int fromIndex, int toIndex)
List list2 = list.subList(2,5);//前闭后开
Iterator iter2 = list2.iterator();
while(iter2.hasNext()){
Object obj = iter2.next();
System.out.println(obj);
}
迭代器
//ListIterator<E> listIterator() 返回列表中的列表迭代器(按适当的顺序)。
ListIterator listIterator = list.listIterator();
// 用于允许程序员沿任一方向遍历列表的列表的迭代器,
while(listIterator.hasNext()){//从前往后遍历
Object obj = listIterator.next();
if(obj.equals(0)){
// list.remove(3);//在迭代器进行迭代的时候 不要使用集合对象取修改集合的元素
list.add("aaa");
// listIterator.set("java");//慎用
// listIterator.add("java");
// listIterator.previous();//指针回退
// System.out.println(o);
}
// System.out.println(list.size()+"----------");
System.out.println(obj);
}
解决并发修改异常 使用普通for进行遍历及修改
for(int i = 0 ; i < list.size();i++){
if(i == 3){
list.add("aaaa");
list.set(3,"bbbb");
}
System.out.println(list.get(i));
}
增强for循环,也不能进行元素的增加和修改,他的底层是用迭代器实现的。