我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java基础之集合框架详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java基础之集合框架详解

一、前言

本节学习到的内容有以下5类,不分先后顺序:

  • 集合Collection体系结构
  • List子类
  • 与集合结合使用的迭代器对象
  • 集合与数组的区别?
  • 常见的一般数据结构整理

二、集合的由来?

  • Collection
  • List

1.ArrayList

2.Vector

3.LinkedList

  • Set

1.hashSet

2.treeSet

在集合没有出现之前,使用对象数组来存储对象,但是,对象数组的长度一旦确定,则不可以发生变化,所以我们希望存在一个容器就像StringBuffer一样存储字符串,同时依据传入的值的个数不同,可以自动改变自身的长度,有这样的东西吗?有的,Collection就出现了,总结一下它的特点:

  • 是一个长度可变的容器
  • 用来存储对象

三、集合和数组的区别?

(1)长度区别

集合的长度可以变化,数组无法变化

(2)内容不同

  • 数组中可以存储的是基本类型与引用类型两种
  • 集合中可以存储的只能是引用类型

(3)存储元素类别的区别

  • 数组只可以存储相同类型的数据
  • 集合中可以存储不同类型的引用对象

四、Collection集合的功能概述?

集合一般使用到的功能有:

  • boolean addAll(Collection c):添加一个集合的元素
  • boolean removeAll(Collection c):移除一个集合的元素(注意:所有),只要有一个元素被移除,则返回true
  • boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(注意:所有)
  • boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?

retainAll方法中,是再求A、B个集合的交集,返回的boolean类型值说明,前面的A集合是否发生过变化。

五、Collection集合存储字符串并遍历?(迭代器)

在集合中存储字符串后,遍历可以通过两种方式实现:

  • 与集合配套的迭代器实现
  • Collection转化为String[ ]

这里我们先使用迭代器遍历集合,如下:


package my_work;

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

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

        col.add("Hello");
        col.add("World");
        col.add("Java");

        Iterator it = col.iterator();
        while (it.hasNext()){
            String s = (String)it.next();// 疑问
            System.out.println(s);
            //System.out.println(it.next());注意:使用的这个方法是不安全的
        }
    }
}

这里为什么在取出元素之后需要强制转型为String类型?难道我不知道我存储的是什么吗?

回答:因为默认的迭代器中返回的元素类型默认是Object类的,为了避免之后的报错,最好将它强制转换,这个可以从原码中得到答案:


public Object next(){} //迭代器中next()方法返回的是一个next对象。

六、Collection集合存储自定义对象并遍历?(迭代器)

(1)案例演示:「IteratorDemo.java」

案例中使用到的迭代器成员方法:

  • boolena hasNext( ):判断迭代器中是否存在元素?
  • Object next( ):以Object类型返回这个元素

使用这两个功能,就可以完成迭代器从集合中遍历元素。

(2)将Collection转换为数组后,使用For循环的遍历


package my_work;

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

public class CollectionToArray {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("Hello");
        c.add("World");
        c.add("Java");

        Object[] objArray = c.toArray();
        for (int x= 0;x<objArray.length;x++){
            String s = (String)objArray[x];
            System.out.println(s);
        }
    }
}

七、List集合的特有功能?


* A:添加功能
*     void add(int index,Object element):在指定位置添加元素
* B:获取功能
*     Object get(int index):获取指定位置的元素
* C:列表迭代器
*     ListIterator listIterator():List集合特有的迭代器
* D:删除功能
*     Object remove(int index):根据索引删除元素,返回被删除的元素
* E:修改功能
*     Object set(int index,Object element):根据索引修改元素,返回被修饰的元素
*/

八、List集合存储字符串并遍历?(迭代器和普通for)

List集合特有的遍历,使用到size()方法和get()方法


package my_work;

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

public class ListDemo {
    public static void main(String[] args) {
        List list = new ArrayList();

        list.add("Hello");
        list.add("Java");
        list.add("World");

        for (int x=0;x<list.size();x++){
            //System.out.println(list.get(x));

            // 推荐做法
            String s = (String)list.get(x);
            System.out.println(s);
        }
    }
}

package my_work;

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

public class ListAndFor {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("hello");
        list.add("world");
        list.add("java");


        for (int x = 0; x < list.size(); x++) {
            String s = (String) list.get(x);
            System.out.println(s);
        }
    }
}

九、List集合存储自定义对象并遍历?(迭代器和普通for)


package my_work;

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

public class ListAndUserObject {
    public static void main(String[] args) {
        List list = new ArrayList();

        Student s1 = new Student(18, "wzy");
        Student s2 = new Student(19, "wzy");
        Student s3 = new Student(20, "wzy");

        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(new Student(24, "wzy"));
        
        // 遍历方式1:while
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Student s = (Student) it.next();
            System.out.println(s.getAge() + "- - - " + s.getName());
        }
        // 遍历方式2:size与get
        for (int x = 0; x < list.size(); x++) {
            Student stu = (Student) list.get(x);
            System.out.println(stu);
        }
    }
}

十、并发修改异常ConcurrentModificationException出现的原因?解决方案?

出现在当迭代器对进行遍历时,我想在程序中加入一个判断,如果这个判断成立,则在集合中添加一个新的元素,这时就会出现并发修改异常错误ConcurrentModificationException:

  • 迭代器拿到的只是一个集合的拷贝,但是此时已经出现了一个新的集合
  • 迭代器在进行迭代时并不知道集合已经发生了变化
  • 迭代器依旧按照原始计划工作

如何解决?

(1)在循环中使用List类特有的迭代器ListIterator()添加新的元素,如下:


package my_work;

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

public class ListExcepiton {
    public static void main(String[] args) {
        List list = new ArrayList();

        list.add("Hello");
        list.add("world");
        list.add("java");

        ListIterator lit = list.listIterator();

        while (lit.hasNext()){
            if ("world".equals(lit.next())){
                lit.add("JavaSE");
            }
        }
        System.out.println(list); // [Hello, world, JavaSE, java],虽然是在迭代器中添加,但是,也会在最终的打印环节显示。
    }
}

(2)使用普通的for循环,在list里直接添加


package my_work;

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

public class ListExceptionFor {
    public static void main(String[] args) {
        List list = new ArrayList();

        list.add("Hello");
        list.add("world");
        list.add("java");

        for (int x = 0; x < list.size(); x++){
            if ("world".equals(list.get(x))){
                list.add("JavaSE");
            }
        }
        System.out.println(list);
    }
}

十一、常见的数据结构的特点?

(1)栈:

就像一个步枪弹匣,出口和入口为同一个,遵循先进后出原则,进出对应着入栈和弹栈

(2)队列:

队列就像隧道里的汽车,遵循先后规则进出,入口与出口不共用

(3)数组:

存储同一种数据类型的容器,具备索引下标,但是删除指定元素和增加指定元素耗时,查询快,增删慢

(4)链表:

链表和结点一起出现;

链表:将结点串起来的链子,使用地址值充当这个串起来的链子;

结点:结点中存储着地址与数据,多个节点之间的地址存放总是相互关联的;

链表也分为双向链表、单向链表…

链表的存储快,删除快,查询慢。

十二、List集合的子类特点

(1)ArrayList:底层数据类型是数组结构,增删慢,查询快,线程不安全,执行效率高;

(2)Vector:底层数据类型是数组结构,增删慢,查询快,线程安全,执行效率低;

(3)LinkedList:底层数据结构是链表,增删快,查询慢,线程不安全,执行效率高

十三、List的三个儿子你准备使用谁?请说明理由。

有关List的使用,

(1)在存储需求出现时,优先考虑LinkedList;

(2)在查询需求出现时,优先考虑ArrayList;

Vector类一般不使用,它出现在JDK1.0,古老的玩意,ArraysList的出现就是为了代替Vector类,虽然说Vector是List的儿子,但是儿子和儿子之间,Vector却是LinkedList和ArrayList的爷爷;

到此这篇关于Java基础之集合框架详解的文章就介绍到这了,更多相关Java集合框架内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java基础之集合框架详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java 集合框架超详细!

JCF是指一个数据集接口框架,它统称为 Collection 和 Map 接口。一组数据被定义为 Collection ,它扩展了 Iterable 接口。Iterable 实现了一个接口结构,允许访问属于集合的元素。This 的访问被定义
JavaJCF2024-11-30

PyQt5之基础框架解读

PyQt5是一款用于开发跨平台图形用户界面的Python库,基于Qt框架,它包含了丰富的模块和类,可用于构建高性能GUI应用程序。PyQt5框架包含QtCore、QtGui、QtWidgets、QtMultimedia和QtNetwork等组件。它采用对象继承的类层次结构,并支持信号和槽机制,用于对象之间的通信。PyQt5提供了强大的布局管理系统,并支持跨平台部署。它广泛应用于桌面应用程序、可视化工具、游戏开发和企业软件等领域。
PyQt5之基础框架解读
2024-04-02

Java集合框架LinkedList详解及实例

Java集合框架LinkedList详解LinkedList定义package java.util;public class LinkedList extends AbstractSequentialList implement
2023-05-31

Java集合系列之JCF集合框架概述

Java集合框架(Java Collections Framework,JCF)是Java平台提供的一套用于存储、操作和管理对象的集合类库。它包含了一系列接口、抽象类和具体实现类,用于表示和操作不同类型的集合数据结构。JCF提供了一种统一的
2023-09-23

Spring框架AOP基础之代理模式详解

代理模式(ProxyParttern)为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象。本文将通过示例详细讲解一下这个模式,需要的可以参考一下
2022-11-13

Java 基础详解(泛型、集合、IO、反射)

计划把 Java 基础的有些部分再次看一遍,巩固一下,下面以及以后就会分享自己再次学习的一点笔记!不是有关标题的所有知识点,只是自己觉得模糊的一些知识点。1.对于泛型类而言,你若没有指明其类型,默认为Object;2.在继承泛型类以及接口的
2023-05-30

Java复习之集合框架总结

俗话说:温故而知新。想想学过的知识,就算是以前学得很不错,久不用了,就会忘记,所以温习一下以前学习的知识我认为是非常有必要的。而本篇文件温习的是 Java基础中的集合框架。为什么会有集合框架?平时我们用数组存储一些基本的数据类型,或者是引用
2023-05-31

Java数据结构之集合框架与常用算法详解

Java集合框架是Java中常用的数据结构库,包括List、Set、Map等多种数据结构,支持快速的元素添加、删除、查找等操作,可以用于解决各种实际问题。Java中也有多种常用算法,如排序、查找、递归等,在数据处理和分析中有广泛应用
2023-05-18

Java Map 入门指南:零基础轻松掌握集合框架的基础知识

Java Map 是 Java 集合框架中最重要的数据结构之一,它允许您将键映射到值。这使得查找和检索数据变得非常容易和高效。本文将向您介绍 Java Map 的基本概念、不同类型的 Map 实现以及如何使用它们。
Java Map 入门指南:零基础轻松掌握集合框架的基础知识
2024-02-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录