集合1(接口:Collection,List,Iterator,ListIterator)

集合概述:

用于存储多个对象的长度可变且能够动态管理元素的容器。

import java.util.ArrayList;
import java.util.List;

public class Text1 {
    public static void main(String[] args) {
        //需求1:设置一个长度为3的Object类数组
        Object[] arr = new Object[3];
        arr[0] = new Object();
        arr[1] = new Object();
        arr[2] = new Object();

        //需求2:添加多个对象
        arr[3] = new Object();//数组越界异常,ArrayIndexOutOfBoundsException

        //问题1:用于存储多个对象的数组,一旦定义后长度无法修改。

        //需求3:将下标为1的对象删除
        arr[1] = null; //把下标为1的对象置空,删除

        //需求4:添加回一个对象
        arr[3] = new Object();//数组越界,ArrayIndexOutOfBoundsException
        //解决需要遍历数组,找到null的下标,在此下标的位置添加对象。


        //问题2:数组元素不能动态管理

        //解决问题1,2----->集合
        List list = new ArrayList();
        list.add(new Object());
        list.add(new Object());
        list.add(new Object());

        list.remove(1);//删除下标为1的对象
        list.add(new Object());//元素动态管理,直接在集合后面添加元素
        
    }
}

总结:

  • 集合能解决了数组长度不可变,数组元素不能动态管理的问题。

集合框架:

在这里插入图片描述

解析:

  • 集合框架以接口作为根,原因是每个集合都有增删改查元素的功能要求,接口的功能就是拓展功能,所以集合框架的根是一个接口。

Collection接口

API介绍
在这里插入图片描述
解析:

  • Collection接口是集合框架的根接口,该接口实现类中每个元素存储的都是对象(地址),其中的元素是否重复或是否有序无法确定,如果需要确定可以使用其子接口List和Set的实现类。该接口一般作为方法的参数使用,目的是扩大类型选择范围。

常用功能方法:

  1. 添加方法:

在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;

public class Text2 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        //boolean add(Object)添加对象到集合,返回boolean值
        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');
        col.add(new Object());

        System.out.println(col);//[1, 1.5, true, abc, s, java.lang.Object@21a06946]
    }
}

2. 删除方法:

在这里插入图片描述
在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;

public class Text2 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');
        col.add(new Object());

        //boolean remove(Object)删除对象,返回boolean值
        col.remove('s');
        System.out.println(col);//[1, 1.5, true, abc, java.lang.Object@21a06946]

        // void clear()清空集合,无返回值
        col.clear();
        System.out.println(col);//[]
    }
}

面试题col=null,col.clear()的区别

  • 答:col=null,将集合空间转换成垃圾空间等待JVM回收。
    col.clear(),保留集合空间,清空空间中的元素。

3. 获取方法:

在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;

public class Text2 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');
        col.add(new Object());

        //int  .set() 获取集合中元素的个数
        int size = col.size();
        System.out.println(size);// 6
    }
}    

4. 判断方法:

在这里插入图片描述
在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;

public class Text2 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');
        col.add(new Object());

        //boolean  contains(Object) 判断集合元素中是否有该对象,返回Boolean值
        boolean b = col.contains("abc");
        System.out.println(b);//true
        b = col.contains("ab");
        System.out.println(b);//false

        //boolean  isEmpty() 判断集合是否为空(空元素),返回Boolean值
        b = col.isEmpty();
        System.out.println(b);//false

        col.clear();//清空集合
        b = col.isEmpty();
        System.out.println(b);//true
  }
}       

5. 带All方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;

public class Text3 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');

        //boolean  addAll(Collection) 将参数集合添加到原集合中,返回Boolean值
        Collection col2 = new ArrayList();
        col2.add(100);
        col2.add("zxc");
        col.addAll(col2);
        System.out.println(col);//[1, 1.5, true, abc, s, 100, zxc]

        //boolean removeAll(Collection) 删除原集合中与参数集合一致的元素,返回boolean值
        col2.add("abc");
        System.out.println(col2);//[100, zxc, abc]
        System.out.println(col);//[1, 1.5, true, abc, s, 100, zxc]
        col.removeAll(col2);
        System.out.println(col);//[1, 1.5, true, s]

        //boolean containsAll(Collection) 判断原集合是否全包含参数集合所有元素,返回boolean值
        Collection col3 = new ArrayList();
        col3.add(1);
        col3.add(false);
        boolean b = col.containsAll(col3);
        System.out.println(b);//false,只包含了一半,col集合没有 false

        //boolean retainerAll(Collection) 将原集合与参数集合相同元素保留,不同元素删除。
        System.out.println(col3);//[1, false]
        System.out.println(col);//[1, 1.5, true, s]
        col.retainAll(col3);
        System.out.println(col);//[1]

    }
}

遍历集合:

  • 增强的for循环:又称之为 foreach循环。

语法:

for( 元素类型	元素名 : 集合 ){
		循环体。
}

元素类型:与集合中每个元素的类型的都要一致。
元素名:标识符。
集合:集合对象名。
import java.util.ArrayList;
import java.util.Collection;

public class Text4 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');

        for (Object object:col) {
            System.out.print(object+" ");//1 1.5 true abc s
            object += "123";
        }
        System.out.println();
        System.out.print(col+" ");//[1, 1.5, true, abc, s]
        
        注意:在foreach循环中对元素修改无法实现,原因是foreach中元素是一个复制品,对复制品修改,集合中正品不会受到影响。
    }
}

迭代器遍历:
在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Text4 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');

        //返回集合中的元素的迭代器遍
        Iterator it = col.iterator();
        System.out.println(it);//java.util.ArrayList$Itr@75412c2f
   }
}   

Iterator接口:

API介绍:
在这里插入图片描述解析:

  • Iterator接口用于遍历集合元素同时也可以使用Enumeration接口遍历集合对象。迭代器与枚举器的区别有两点:(1)迭代器可以在遍历集合过程中删除集合元素,而枚举器不可以。(2)迭代器的方法名比枚举器的方法名更加简洁。

常用功能方法;

在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Text5 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(2.3);
        col.add(true);
        col.add("abc");
        col.add('s');

        //方法1:迭代器遍历集合---While()方法
        Iterator it = col.iterator();
        //hasNext():判断下方是否存在元素,如果存在返回true,否则返回false
        while(it.hasNext()){
            //.next() 往下移动指针后,获取集合中一个元素
            System.out.print(it.next()+" ");//1 2.3 true abc s
        }

        System.out.println();//换行

        //方法2:迭代器遍历集合---for()方法【最常用】
        for (Iterator it2 = col.iterator();it2.hasNext();){
            System.out.print(it2.next()+" ");//1 2.3 true abc s
        }
    }
}

常见问题:

  • Iterator迭代器只能迭代一次集合元素问题

在这里插入图片描述

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Text6 {
    public static void main(String[] args) {
        Collection col = new ArrayList();

        col.add(1);//1-->装箱-->Integer-->向上类型转换-->Object
        col.add(1.5);
        col.add(true);
        col.add("abc");
        col.add('s');
        
        for (Iterator it = col.iterator();it.hasNext();){
            Object obj = it.next();
            System.out.print(obj+" ");//1 1.5 true abc s
            //.remove() 通过迭代器删除集合元素
            if(obj instanceof Double){//遍历哪个对象是Double类型
                if (((Double) obj).doubleValue()==1.5){//向下转换后,判断哪个对象是1.5
                    it2.remove();
                }
            }
            //col.remove(1.5);通过集合删除1.5
        }
        System.out.println();
        System.out.print(col+"");//[1, true, abc, s]
    }
}

问题1:直接使用.remove()方法回出现 java.lang.IllegalStateException 参数状态异常,为什么?

  • 答:指针在第一个元素上方,所以无法删除元素。所以要与.next()一起使用,才能下移到元素并进行删除。

问题2:在迭代集合的过程中使用集合的删除方法删除元素,出现java.util.ConcurrentModificationException 并发修改异常,为什么?

  • 答:如果在迭代过程中使用集合中删除方法,导致迭代器中原有数据与集合数据不吻合,导致异常。 所以只能使用迭代器的删除方法删除集合元素。

List接口:

API介绍;
在这里插入图片描述解析:

  • List接口代表有序集合,该接口的实现类能够通过下标插入元素,获取元素,搜索元素。

常用功能方法:

1. 添加方法:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200902211128527.png#pic_center

import java.util.ArrayList;
import java.util.List;

public class Text7 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        //add(int ,Object)通过下标插入元素
        list.add(1,-101);
        System.out.println(list);//[1, -101, 2.3, true, abc, z]

        //addAll(int , Collection)通过下标插入参数集合
        List list2 = new ArrayList();
        list2.add("wahaha");
        list2.add("ADG");
        list.addAll(3,list2);
        System.out.println(list);//[1, -101, 2.3, wahaha, ADG, true, abc, z]

    }
}
  1. 删除方法;

在这里插入图片描述

import java.util.ArrayList;
import java.util.List;

public class Text7 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        System.out.println(list);//[1, 2.3, true, abc, z]
        //.remove(int) 根据下标删除集合中对应的对象
        //obj = list.remove(4);
        //注意点1:如果下标不存在删除时会出现 IndexOutOfBoundsException 下标越界异常
        //注意点2:如果下标值与集合中元素对象相同这是使用的remove还是删除下标方法。
        list.remove(2);
        System.out.println(list);//[1, 2.3, abc, z]

		list.add("abc");
        System.out.println(list);//[1, 2.3, abc, z, abc]
        //注意点3:如果集合中存在多个相同的对象,这时remove该对象,则只会删除其中一个。
        list.remove("abc");
        System.out.println(list);//[1, 2.3, z, abc]
    }
}

3. 获取方法:

在这里插入图片描述

import java.util.ArrayList;
import java.util.List;

public class Text7 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');
     
        //.get(int) 根据下标获取相应的对象
        Object obj = list.get(2);
        System.out.println(obj);//true
     }   
}

4 修改方法:

在这里插入图片描述

import java.util.ArrayList;
import java.util.List;

public class Text7 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        //.set(int , object)根据下标修改相应的对象,返回未修改前的对象
        Object obj = list.set(1,3.14);
        System.out.println(obj);//2.3
        System.out.println(list);//[1, 3.14, true, abc, z]
    }    
}

遍历集合方法;

  1. 增强for循环(foreach)遍历
import java.util.ArrayList;
import java.util.List;

public class Text8 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        for (Object object:list) {
            System.out.println(object);
        }
    }
}

2. for循环:

import java.util.ArrayList;
import java.util.List;

public class Text8 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        //.size()获取集合元素个数
        for (int i=0;i<list.size();i++){
            Object obj = list.get(i);
            System.out.println(obj);
        }
   }     
}

3. 使用Iterator 迭代集合

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Text8 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        //使用迭代器
        for (Iterator it = list.iterator();it.hasNext();){
            System.out.println(it.next());
        }
    }    
}

ListIterator接口:

API介绍:
在这里插入图片描述解析:

  • ListIterator接口是一个可以任意方向遍历集合的遍历器,该接口提供修改元素方法,以及向上或向下获取元素方法。

常用功能方法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Text9 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        //第一次迭代器遍历集合
        ListIterator it = list.listIterator();//只创建一个迭代器
        for (;it.hasNext();){
            //.next() 向下移动指针
            System.out.println(it.next());
        }
        //指针到集合最后一个元素
        System.out.println("-------------------");
        //第二次从下到上遍历
        //.hasPrevious() 判断是否存在上一个元素,返回Boolean值
        for (;it.hasPrevious();){
            //.previous() 向上移动指针
            System.out.println(it.previous());
        }
        //指针到集合第一个元素上方
        //第三次从上到下遍历
        System.out.println("-------------------");
        for (;it.hasNext();){
            //.next() 向下移动指针
            System.out.println(it.next());
        }

    }
}
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Text9 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2.3);
        list.add(true);
        list.add("abc");
        list.add('z');

        ListIterator it = list.listIterator();//创建一个迭代器
        for (;it.hasNext();){
            //.next() 向下移动指针
            it.next();
            //.set(Object) 在迭代过程中,将集合中元素对象修改成目标对象。
            //it.set("wahaha");[wahaha, wahaha, wahaha, wahaha, wahaha]
            //.add(Object) 在迭代过程中,添加目标元素
            it.add("123");
        }
        System.out.println(list);//[1, 123, 2.3, 123, true, 123, abc, 123, z, 123]
     }   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值