入门Java编程的知识点—>集合(day17)

  • 了解掌握什么是Collection(集合)?
  • 重点掌握集合中集合中ArrayList的使用?
  • 重点掌握iterator(迭代器)的使用?
  • 重点掌握增强for循环的使用?
集合
概述

数组和集合都是Java中提供的容器

集合: 英文译为 Collection,用来存放对象的容器,集合中可以存放不同类型的对象,并且集合的长度可变。

在编程时,常常需要集中存放多个数据,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组就有点无能为力了;

为了保存数量不确定的数据,以及保存具有映射关系的数据,Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。

小结: 集合和数组的对比:

  • 数组中的元素可以基本类型的值,也可以是对象; 而集合中只能保存对象

  • 数组一旦指定了长度,长度就不能再改变; 而集合的长度是可以随时改变的

  • 往数组中插入元素非常麻烦,需要将插入位置后面的元素往后移动; 或者删除数组中间位置的某一个元素, 需要将删除位置后的元素往前移动; 而如果往集合中插入元素或者删除集合中的某一个元素,直接使用现成的方法操作即可

集合的继承结构

由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。

Collection集合是所有单值集合的顶层接口, 其中定义了常用的用于操作集合以及集合中元素的方法

例如: 添加元素、删除元素、获取元素、获取集合长度、判断功能、将集合转成数组、迭代器遍历元素等功能

List
概述

List是一个有序的Collection(List是Collection的子接口),使用此接口能够精确的控制每个元素插入的位置,能够通过索引(类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。

List 接口存储一组可重复、有序(插入顺序)的对象。

特点
  1. 元素有下标,可以通过下标访问元素

  2. 元素是有序的(存入集合的顺序和取出的顺序一定相同)

  3. 元素可以重复

  • 常用实现类:

    • java.util.ArrayList:内部使用的是数组,查询性能很好
    • java.util.LinkedList:内部使用的是链表,增删性能很好

    对性能要求不是特别苛刻的情况下,通常使用ArrayList

实例1:ArrayListDemo
package arraylistdemo;

import java.util.ArrayList;
/**
 * JAVA集合框架
 * 集合和数组一样,都是保存一组元素的工具,但是集合将元素的操作都封装了方法,操作非常简便
 * 并且集合提供了很多的不同的实现供我们使用
 * java.util.Collection是所有集合的顶级接口,里面定义了所有的集合都必须要具备的功能和方法
 * 集合中有两类常用的子类:
 * java.util.List: 可重复的集合,且有序,通过称之为线性表
 * java.util.Set: 不可重复的集合
 */
public class CollectionDemo1 {
    public static void main(String[] args) {

         //集合中只能存放引用类型
        ArrayList<String> arrayList = new ArrayList();
        /*
        * JDK5之后,还推出了一个特性:泛型
        * 泛型也称为参数化类型,他的原型就是Object,
        * 泛型的目的是让我们将定义的Object类型当做什么看待
        * 如果不指定泛型,那么类型当成Object类型,如果指定了E的类型,
        * 所有设置到的E的位置都变成对应类型
        * public class User<E>{
        *   public E getName(E e)
        * }
        * User<String> a = new User();
        * String d = a.getName("ccc");
        * */
        /*
         * 向集合添加元素
         * 需要调用add方法" boolean add(E e) 这个E是泛型,这里先理解为是Object
         * 向指定的集合添加元素,如果元素添加成功,返回true,否则返回false
         * */
        arrayList.add("one");//add:直接传入需要添加的元素即可
        arrayList.add("two");
        arrayList.add("three");
        arrayList.add("four");
        arrayList.add("five");
        System.out.println(arrayList);//[one, two, three, four, one]
//        arrayList.remove(0);//remove:根据传入的下标,返回该集合中对应的数据
        System.out.println(arrayList);
        int size = arrayList.size();//size();获取集合的长度
        System.out.println("集合的长度:"+size);
        boolean empty = arrayList.isEmpty();//判断集合是否为一个空集,当size=0是,也就是空集,返回true
        System.out.println("集合是否为空集:"+empty);
        arrayList.set(0,"one1");//set方法可以根据传入的下标和修改数据修改下标对应的数据 
//        arrayList.clear(); //clear 方法可以清空当前集合中的所有元素
        System.out.println(arrayList.contains("one1"));//判断是否包含传入元素.
        String[] strs= arrayList.toArray(new String[0]);//将集合元素转换为数组存储
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
        List<String> list = Arrays.asList(strs);//将数组转换为集合
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}
集合的遍历
IteratorDemo
package collection;

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

/**
 * 集合的遍历
 * 集合支持遍历操作,我们可以通过遍历最终结果拿到每一个元素
 * 集合提供了一种遍历的方式:迭代器模式
 * 对应方法
 * Iterator iterator()
 * 该方法会返回一个用于遍历当前集合的迭代器对象
 * java.util.Iterator是迭代器接口,定义了迭代器遍历集合的基本操作,所有的集合够提供了用于遍历
 * 自身的元素的迭代器的实现类,我们无需记忆他们的名字,用多态的思想统一看做是Iterator对象即可
 * 迭代器遍历集合遵循的步骤:问->取->删.其中删除不是必须的操作
 */
public class IteratorDemo {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("one");
        arrayList.add("#");
        arrayList.add("two");
        arrayList.add("#");
        arrayList.add("three");
        arrayList.add("#");
        arrayList.add("four");
        arrayList.add("#");
        arrayList.add("five");
        System.out.println(arrayList);
        //获取当前集合的迭代器对象
        Iterator it = arrayList.iterator();
        /*
        * boolean hasNext()
        * 判断集合中是否还有下一个元素可以遍历,迭代器的起始位置可以理解为是集合中第一个元素之前,
        * 因此第一次调用hasNext()就是判断集合中是否有第一个元素
        * E next()
        * 获取集合中下一个元素,获取后迭代器的位置就会自动向后移动一个元素
        * */
        while (it.hasNext()){
            String next = (String) it.next();
            System.out.println(next);
            //判断遍历的元素是否是'#'
            if("#".equals(next)){
                //如果是'#',就删除
                /*
                * 迭代器在遍历的过程中,不能通过集合的方法来增删元素,否则会抛异常:
                * java.util.ConcurrentModificationException
                * */
                //c.remove(next);
                /*
                * 迭代器提供了remove方法,可以将本次通过next方法获取到的元素从集合中删除
                * */
                it.remove();
            }
        }
        System.out.println(arrayList);
    }
}
增强型for循环
NewForDemo
package collection;

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

/**
 * JDK5推出时,推出了一个新特性:增强型for循环
 * 通过也称为新循环
 * 新循环并不能取代传统for循环的工作,只能为了使用相同的语法来遍历集合或者数组
 * 语法:
 * for(元素类型 e : 遍历的集合或者数组){
 *      输出元素e
 * }
 */

public class NewForDemo {
    public static void main(String[] args) {
        String[] array = {"one","two","three","four","five"};
        //传统for循环遍历 array.fori
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        //新循环遍历数组 array.for
        for( String e : array ){
            System.out.println(e);
        }
        ArrayList<String> arrayList  = new ArrayList();
        arrayList.add("一");
        arrayList.add("二");
        arrayList.add("三");
        arrayList.add("四");
        arrayList.add("五");
        for( String s : arrayList){
            System.out.println(s);
        }
        arrayList.forEach(new Consumer<String>() {
            @Override
            public void accept(String v) {
                System.out.println("匿名内部类遍历:" + v);
            }
        });
        arrayList.forEach((String v) -> {
                    System.out.println("lambda遍历:" + v);
                }
        );
        //参数类型可忽略
        //参数如果只有一个,小括号也可以省略
        //执行逻辑只有一行,花括号可不写
        arrayList.forEach(v -> System.out.println("lambda遍历:" + v));
    }
}

总结

1. 什么是Collection(集合)?

答:数组和集合都是Java中提供的容器,集合用来存放对象的容器,集合中可以存放不同类型的对象,并且集合的长度可变。

2. 集合中集合中ArrayList是什么,如何使用?

答:内部使用的是数组,查询性能很好. ArrayList在使用时可以通过泛型指定该集合对象可存储的数据类型。

ArrayList<String> alist = new ArrayList();  该集合对象只能存储String类型的数据 

3. iterator(迭代器)的使用?

答: 迭代器遍历集合遵循的步骤:问->取->删.其中删除不是必须的操作。

 		/*
        * boolean hasNext()    
        * 判断集合中是否还有下一个元素可以遍历,迭代器的起始位置可以理解为是集合中第一个元素之前,
        * 因此第一次调用hasNext()就是判断集合中是否有第一个元素
        * E next()
        * 获取集合中下一个元素,获取后迭代器的位置就会自动向后移动一个元素
        * void remove()
        * 删除当前获取到的元素 
        * */

4. 增强for循环是什么,如何使用?

答:JDK5推出时,推出了一个新特性:增强型for循环,新循环不能替代传统for的循环工作,只能为了使用相同的语法来遍历集合或者数组.

 语法:
  for(元素类型 e : 遍历的集合或者数组){
       输出元素e
 }

上篇文章:入门Java编程的知识点—>线程安全(day16)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Z0412_J0103/article/details/141553816下篇文章: 入门Java编程的知识点—>Map(day18)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Z0412_J0103/article/details/141554619

  • 51
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值