Java进阶,集合,Colllection,常见数据结构

本文深入探讨了Java中的集合,特别是Collection接口及其特点,包括ArrayList和LinkedList的底层原理。文章还详细介绍了常见的数据结构,如栈、队列、数组、链表、二叉树、平衡二叉树和红黑树。此外,还讨论了List集合的遍历方式,如迭代器、增强for循环和Lambda表达式,并讲解了泛型的概念、优势以及如何在类、方法和接口中使用泛型。
摘要由CSDN通过智能技术生成

Java集合,Collection,常见数据结构,list集合,泛型

一.集合的体系特点

数组的特点

  • 数组定义完成并启动后,类型确定、长度固定

  • 不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。

  • 数组的功能也比较的单一,处理数据的能力并不是很强大。

集合的特点

  • 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。

  • 集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。

  • 同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。

集合类体系结构

  • Collection单列集合,每个元素(数据)只包含一个值。

  • Map双列集合,每个元素包含两个值(键值对)。

Collection集合特点

List系列集合:添加的元素是有序、可重复、有索引。

  • ArrayList、LinekdList :有序、可重复、有索引。

Set系列集合:添加的元素是无序、不重复、无索引。

  • HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。

  • TreeSet:**按照大小默认升序排序、**不重复、无索引。

泛型

  • 集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型

Collection lists = new ArrayList();
Collection lists = new ArrayList<>(); // JDK 1.7开始后面的泛型类型申明可以省略不写

注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

// 存储基本类型使用包装类
Collection lists = new ArrayList<>();

Collection lists = new ArrayList<>();

二.Collection集合的常用API

  • Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

1.Collection API如下:

方法名称 说明
public boolean add(E e) 把给定的对象添加到当前集合中
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把给定的对象在当前集合中删除
public boolean contains(Object obj) 判断当前集合中是否包含给定的对象
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数。
public Object[] toArray() 把集合中的元素,存储到数组中

2.实际运用:

public class CollectionAPIDemo {
   
    public static void main(String[] args) {
   
        Collection<String> c = new ArrayList<>();
        //1.添加元素,添加成功返回true
        c.add("Java");
        c.add("HTML");
        c.add("HTML");
        c.add("MySQL");
        c.add("Java");
        c.add("张飞");
        c.add("Java");
        System.out.println(c);

        //2.清空集合的元素
//        c.clear();
//        System.out.println(c);

        //3.判断集合是否为空,是空返回true,反之
        System.out.println(c.isEmpty());

        //4.获取集合的大小
        System.out.println(c.size());

        //5.判断集合中是否包含某个元素
        System.out.println(c.contains("Java")); // true
        System.out.println(c.contains("诸葛亮"));// false
        System.out.println(c.contains("MySQL"));// true

        //6.删除某个元素:如果有更多个重复元素默认删除前面的第一个!
        System.out.println(c.remove("java"));//false
        System.out.println(c);
        System.out.println(c.remove("Java"));//true
        System.out.println(c);

        //7.把集合转换成数组 [HTML, HTML, MySQL, Java, 张飞, Java]
        Object[] arrs = c.toArray();
        System.out.println("数组:" + Arrays.toString(arrs));

        System.out.println("=================================");
        Collection<String> c1 = new ArrayList<>();
        c1.add("java1");
        c1.add("java2");
        Collection<String> c2 = new ArrayList<>();
        c2.add("关羽");
        c2.add("张飞");
        //addAll把c2集合的元素全部放入c1中去
        c1.addAll(c2);
        System.out.println(c1);
        System.out.println(c2);
    }
}

三.Collection集合的遍历方式

1.方式一:迭代器,Iterator

迭代器遍历概述

  • 遍历就是一个一个的把容器中的元素访问一遍。

  • 迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。

Collection集合获取迭代器

方法名称 说明
Iterator iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

Iterator中的常用方法

方法名称 说明
boolean hasNext() 询问当前位置是否有元素存在,存在返回true ,不存在返回false
E next() 获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。
public class CollectionDemo1 {
   
    public static void main(String[] args) {
   
        Collection<String> lists = new ArrayList<>();
        lists.add("刘备");
        lists.add("关羽");
        lists.add("张飞");
        lists.add("卧龙");
        System.out.println(lists);

        //1.得到当前集合的迭代器对象
        Iterator<String> it = lists.iterator();

        //2.定义while循环
        while (it.hasNext()){
   
            String ele = it.next();
            System.out.println(ele);
        }
    }
}

迭代器如果取元素越界会出现NoSuchElementException异常。

2.方式二:foreach/增强for循环

增强for循环

for(元素数据类型 变量名 : 数组或者Collection集合) {

​ //在此处使用变量即可,该变量就是元素}

  • 增强for循环:既可以遍历集合也可以遍历数组

例子:

Collection list = new ArrayList<>();

for(String ele : list) {
System.out.println(ele);
}

public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值