JAVASE高级 day_2 集合1:Collection、List

集合

集合的作用:存储数据
变量 数组
数组的优缺点:

优点:
	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循环,也不能进行元素的增加和修改,他的底层是用迭代器实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值