Java集合框架详解(一)Collection接口、List接口、ArrayList类、Vector类

news2024/10/6 11:49:29

一、集合架构图

在这里插入图片描述

二、Collection接口

Collection集合的遍历
迭代器:Iterater

方法名称备注
Iterater Iterater()返回在此collection的元素上进行迭代的迭代器
boolean hasNext()如果有元素可以迭代,返回true,否则返回false
E next()返回迭代的下一个元素
Collection<String> collection = new ArrayList<String>();
collection.add("test01");
collection.add("test02");
collection.add("test03");
collection.add("test04");
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
	System.out.println(iterator.next());
}

手写Iterator迭代器的hasNext方法和next方法:

public class TestIterator {
    private List list;
    
    /**
     * @param list
     */
    public TestIterator(List list){
        this.list = list;
    }

    //计数器 初始值为0
    private int count = 0;

    /**
     * 手写 next方法
     * @return
     */
    public Object next(){
        if(list == null){
            throw new TestException("list is null");
        }
        if(count>=list.size()){
            throw new TestException("无法向下获取元素了");
        }
        return list.get(count++);
    }

    /**
     * 手写 hasNext方法
     * @return boolean 
     */
    public boolean hasNext(){
        return count != list.size();
    }
}

> 三、List接口:

(1)有序集合:存储和取出的元素顺序一致,可以精确控制集合中每个元素,可以通过索引访问元素,并搜索集合中的元素。
(2)可重复:存放的数据可以重复。
(3)子类:

  • ArrayList:底层是基于数组结构来实现的;
  • LinkedList:底层是基于链表结构来实现的。

三、ArrayList类

  1. ArrayList的特点

ArrayList是基于数组结构来实现的。
ArrayList根据index下标查询get(index)、修改set(index, e)效率非常高,增加add(e)、删除remove(index)效率非常低。
ArrayList存放的数据可以重复,存入数据保证有序性。
ArrayList不是线程安全的。
ArrayList类是一个可以动态修改的数组,它没有固定长度.
ArrayList类位于java.util包中。

  1. ArrayList常见的方法
方法名称备注
public boolean add(E e)将元素插入到arraylist中
public boolean add(int index, E e)将元素插入到指定位置的arraylist中
public E remove(int index)删除ArrayList里的单个元素
public E set(int index, E element)替换ArrayList中指定索引的元素
public E get(int index)通过索引值获取ArrayList中的元素
public int size()返回Arraylist里元素数量

eg:

List<String> arrayList = new ArrayList<String>();
//添加元素1
arrayList.add("test01");
arrayList.add("test02");
//添加元素2
arrayList.add(2, "text03");
//删除元素
arrayList.remove(1);
//替换元素
arrayList.set(0,"test011");
//元素数量
arrayList.size();
  1. ListItertor迭代器
方法名称备注
ListItertor listIterator()返回在此list的元素上进行迭代的迭代器
boolean hasNext()从前往后,如果有元素可以迭代,返回true,否则返回false
boolean hasPrevious()从后往前,如果有元素可以迭代,返回true,否则返回false
E next()从前往后,返回迭代的下一个元素
E previous()从后往前,返回迭代的下一个元素
public class Test02 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("test01");
        list.add("test02");
        list.add("test03");
        ListIterator listIterator = list.listIterator();
        //从前往后遍历
        while (listIterator.hasNext()){
            System.out.println(listIterator.next());
        }
        //从后往前遍历
        while (listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
    }
}
  1. 增强for循环
int[] arrInt = {60,88,99,10};
for(int arr:arrInt){
	System.out.println(arr);
}
System.out.println("---------------------");
List<String> list = new ArrayList<String>();
list.add("test01");
list.add("test02");
list.add("test03");
list.add("test04");
for(String arr:list){
	System.out.println(arr);
}
  1. Arrays.asList方法
    Arrays.asList方法可以创建集合,但创建的集合时不能够进行添加add()和删除remove()操作,集合的元素个数是不能够发生变化的,可以使用set()方法进行替换元素操作。
public static void main(String[] args) {
	//使用Arrays.asList方法创建的集合时不能够添加add()和删除remove()的
    List<String> stringList = Arrays.asList("qize", "chenq", "zeyu");
    System.out.println(stringList);
 }
  1. ArrayList的效率问题

ArrayList 查询功能(get):底层基于数组实现,根据index下标查询效率非常高,时间复杂度为O(1)。
ArrayList 新增功能(add):ArrayList默认初始化数组容量为10,如果底层数组容量不够的情况下,就会触发动态扩容机制,效率非常低。
ArrayList 删除功能(remove):会将删除后面的元素向前移动一位效率也非常低。
ArrayList 修改功能(set):根据下标位置修改,效率非常高;根据元素修改,效率非常低。

  1. ArrayList总结

(1)ArrayList 底层是基于数组实现的;
(2)ArrayList 底层数组初始化容量为10;
(3)ArrayList 每次扩容是原来的1.5倍;
(4)ArrayList 是线程不安全的;
(5)ArrayList 懒加载的形式去初始化容量,不调用add方法不会有容量

ArrayList 的 add()方法的实现:

(1)判断集合容量是否装得下;
(2)如果装不下则扩容,1.5倍创建新数组,将原来的数组的数据拷贝到新的数组中。

ArrayList 的 get()方法的实现:

(1)直接提供了根据index下标查询,效率非常高;

ArrayList 的 remove()方法的实现:

(1)查找到删除对于的index 下标位置+1到最后的元素值向前移动一位。

四、Vector类

  1. Vector总结

(1)Vector 底层是基于数组实现的;
(2)Vector 底层数组初始化容量为10;
(3)Vector 每次扩容是原来的2倍;
(4)Vector 是线程安全的;
(5)Vector 直接通过构造函数去初始化容量,数组容量为10。

eg:

public class Test01 {
    public static void main(String[] args) {
        Vector<String> strings1 = new Vector<>();
        strings1.add("qize");
        //参数10为初始化容量=10,参数20为每次扩容20
        Vector<String> strings2 = new Vector<>(10,20);
    }
}

五、ArrayList 与Vector的异同

  1. 相同点

(1)ArrayList 与 Vector 底层都是基于数组实现的;
(2)ArrayList 与 Vector 初始化数组容量都为10;
(3)ArrayList 与 Vector 都是List接口下的子类。

  1. 不同点

(1)ArrayList 是线程不安全的,Vector 是线程安全的;
(2)ArrayList 每次扩容是原来的1.5倍,Vector 每次扩容是原来的2倍;
(3)ArrayList 懒加载的形式去初始化容量,不调用add方法不会有容量,Vector 直接通过构造函数去初始化容量,Vector 可以设置每次扩容的容量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka - Kafka生产者|发送消息|分区策略|提高吞吐量|数据可靠性|数据去重|数据有序

文章目录1. Kafka 生产者2. 生产者发送消息1. 生产者异步发送消息2. 生产者异步发送消息带回调函数3. 生产者同步发送消息3. 生产者发送消息的分区策略1. Kafka 分区好处2. 分区器 DefaultPartitioner 和 ProducerRecord 源码3. 指定 partition 的情况4. 没有指定 partition 但…

从零集成mybatis-plus

Mybatis-Plus特性&#xff1a; 无侵入&#xff0c;即引入它不会对现有工程产生影响。损耗小&#xff0c;启动就会自动注入基本的CRUD&#xff0c;内置通用Mapper、Service等&#xff0c;基本能满足大部分需求。支持主键自动生成&#xff0c;其中包括分布式唯一ID生成器Sequenc…

PTA题目 分段计算居民水费

为鼓励居民节约用水&#xff0c;自来水公司采取按用水量阶梯式计价的办法&#xff0c;居民应交水费y&#xff08;元&#xff09;与月用水量x&#xff08;吨&#xff09;相关&#xff1a;当x不超过15吨时&#xff0c;y4x/3&#xff1b;超过后&#xff0c;y2.5x−17.5。请编写程序…

[附源码]java毕业设计时事资讯平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

黑*头条_第1章_项目介绍和工程搭建

黑*头条_第1章_项目介绍和工程搭建 文章目录黑*头条_第1章_项目介绍和工程搭建学习目标1. 项目介绍1.1项目背景1.2 项目概述1.3 项目术语定义2. 项目需求2.1 APP主要功能大纲2.2 APP用例图&#xff08;主要功能&#xff09;2.3 WEMEDIA功能大纲2.4 WEMEDIA用例图&#xff08;主…

STM32嵌入式工程师自我修养

STM32嵌入式工程师自我修养一、STM32必备技能二、程序员必须熟知三、学习STM32自备资料和硬件一、STM32必备技能 1、熟悉 C 语言编程&#xff0c;熟练 STM32CUBEMX,Keil 开发环境。 2、熟悉基于STM32 MCU开发&#xff0c;掌GPIO,TIME,PWM,ADC等外设开发。 3、熟悉USART,IIC,SP…

快速熟悉C++之常用语法

函数重载&#xff08;Overload&#xff09; 规则 函数名相同 参数个数不同、参数类型不同、参数顺序不同 ◼ 注意 返回值类型与函数重载无关 调用函数时&#xff0c;实参的隐式类型转换可能会产生二义性 ◼ 本质 采用了name mangling或者叫name decoration技术 ✓…

Java锁对象

Java锁 1. 对象头 1.1 简介 以32位的 JVM 为例&#xff0c;每个Java对象的对象头都包含了如下信息 # 组成 Mark Word: 锁的信息&#xff0c;hashcode&#xff0c;垃圾回收器标志 Klass Word: 指针&#xff0c;包含当前对象的Class对象的地址&#xff0c;类对象来确…

基于python的校园社团管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

JS 类总结

类 class 关键字是 ES6 新增的。类&#xff08;class&#xff09;是ECMAScript 中新的基础性语法糖&#xff0c;本质上还是一个函数&#xff0c;但实际上它使用的仍然是原型和构造函数的概念。并且类受块级作用域限制。 class Person { } console.log(Person);// class Perso…

Java无锁并发

共享资源 1. 不安全场景 package com.nike.erick.d05;import lombok.Getter;import java.util.concurrent.TimeUnit;public class Demo01 {public static void main(String[] args) throws InterruptedException {BankService bankService new BankService();for (int i 0;…

H5 app开启web调试

前言&#xff1a; 在Android app逆向时&#xff0c;H5类型的app的加密通常在js中&#xff0c;所以就需要一种手段来查看源代码&#xff0c;查看加密过程。 0、如何确认h5 app 以狗东为例&#xff1a; 随便选择一个元素&#xff0c;可以看到是控件下的一个类 通过与H5类型的ap…

[附源码]SSM计算机毕业设计在线课程网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于java_ssm_vue鲜花在线销售商城网站-计算机毕业设计

现在&#xff0c;许多人都喜欢在节日的时候给家人或朋友送鲜花&#xff0c;但是有时候会因为工作忙而忘记或者是没有时间自己去买&#xff0c;同时也有些人觉得自己去买有些麻烦&#xff0c;所以鲜花网络销售是很有必要的。这个网站应该可以提供提前预定、送货上门等服务。首先…

Arduino开发实例-MAX30100传感器模块连接问题解决

MAX30100传感器模块连接问题解决 MAX30100 是一款集成脉搏血氧饱和度和心率监测传感器解决方案。 它结合了两个 LED、一个光电探测器、优化的光学器件和低噪声模拟信号处理,以检测脉搏血氧饱和度和心率信号。 MAX30100 采用 1.8V 和 3.3V 电源供电,可通过软件关断,待机电流…

【Java第33期】:在普通的Maven项目中存储Bean对象并获取和使用

作者&#xff1a;有只小猪飞走啦 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 内容&#xff1a;存储Bean对象&#xff0c;再在Spring中获取Bean对象&#xff0c;对其进行使用。 文章目录前言一&#xff0c;存储Bean对象1&#xff0c;创建Bean对象2&…

过控Matlab-串级控制系统的参数整定(二)

太原理工大学过程控制实验之串级控制系统的参数整定 过控Matlab-串级控制系统的参数整定实验内容1.根据动态特性参数法对简单控制系统的控制器参数整定2.根据稳定边界方法对简单控制系统的控制器参数整定利用稳定边界法&#xff0c;分别计算系统采用P、PI、PID调节规律时的PID控…

玩机搞机---关于安卓机型工厂固件 刷机 端口解密 解bl锁 写串 nv损坏 等相关常识

*******工程机和工厂固件方面的常识 可能很多玩机友友对什么是工厂固件比较陌生。那么今天的话题就围绕这个和大家讨论下。其实一般厂家的流程都是在一部机型推放市场之前&#xff0c;需要经过预研企划、研发设计、全面测试等诸多环节。在这一整个改善的全过程中&#xff0c;厂…

使用Eclipse搭建STM32嵌入式开发环境

1. Eclipse 软件和相关工具的安装 使用 Eclipse 开发 STM32 等嵌入式软件项目时&#xff0c;需要安装的软件或者工具有&#xff1a; Eclipse 软件本身&#xff0c;eclipse-inst-jre-win64.exe交叉编译工具链&#xff0c;gcc-arm-none-eabi-10.3-2021.10-win32make 构建工具&a…

linux读写锁

这里写目录标题读写锁的认识读写锁的相关函数练习读写锁的认识 &#xff08;1&#xff09;读写锁是一把锁 &#xff08;2&#xff09;读写锁的类型&#xff1a; pthread_rwlock_t lock 又分“读锁”&#xff08;对内存进行读操作&#xff09;和“写锁”&#xff08;对内存进行…