java中集合API

集合API

  • 一、简述
  • 二、Collection
    • (1).List
      • 1.ArrayList:
      • 2. LinkedList
    • (2) Set
  • 三、Map
    • 1.HashMap
    • 2. TreeMap
  • 三、Iterator接口
  • Collections工具类
    • 1.对集合元素进行排序
      • 2.基于Comparator,自定义方法(内部类)进行排序

一、简述

  • Collection:
    最基础的集合接口,所有具体集合类都直接或简介实现了这个接口
  • Map:
    以键值对方式存储
  • Iterator:
    迭代器,常用语遍历集合中的元素

二、Collection

在这里插入图片描述

常见方法:

  • add(E e): 将元素添加到集合中,如果集合不支持添加操作则抛出UnsupportedOperationException异常。
  • clear():清空操作
  • contains(Object o): 是否包含指定元素,有则返回true/无 false
  • isEmpty(): 是否为空
  • iterator():返回一个迭代器,用于遍历元素
  • remove(Object o):从集合中移除指定元素
  • size(): 返回集合元素个数
  • toArray():将集合中元素转换为数组

(1).List

  • 有序性:List保持元素的插入顺序。
  • 可重复性:List允许同一个元素出现多次。
  • 索引访问:提供了基于索引(可以理解为下标)的方法来访问和修改列表中的元素。

1.ArrayList:

数组列表,既有数组的特性又有列表的特性,能够动态调整列表大小,访问元素非常快,单插入和删除操作较慢,尤其是列表中间进行这些操作,原因是需要移动元素

import java.util.ArrayList;public class ArrayListDemo01 {public static void main(String[] args) {ArrayList<String> 	zqstar = new ArrayList<>();//添加zqstar.add("内马尔");zqstar.add("德布劳内");zqstar.add("萨拉赫");if(zqstar.contains("内马尔")){System.out.println("内马尔 is in the list.");}// 获取并打印指定索引处的元素String secondZqStar = zqstar.get(1);System.out.println("Second zqstar is: " + secondZqStar);// 替换指定位置的元素zqstar.set(2, "博格巴");System.out.println("List after replacement: " + zqstar );// 删除指定位置的元素zqstar.remove(1);System.out.println("List after deletion: " + zqstar);// 清空列表zqstar.clear();System.out.println("List is empty now? " + zqstar.isEmpty());}
}

手搓简易版ArrayList

package com.example.test.api;import java.util.Arrays;public class MyArrayList {/*存储数据*/private Object[] data;private int size;/*用于记录有效元素的个数*/public MyArrayList() {this.data = new Object[16];}public MyArrayList(int capacity) {this.data = new Object[capacity];}//向size位置添加新的元素public void add(Object element) {//判断是否需要扩容if (size == data.length) {data = Arrays.copyOf(data, 2 * data.length);}//存储data[size] = element;size++;}//删除public boolean remove(Object obj) {if (size == 0) return false;//遍历找元素boolean flag = false;for (int i = 0; i < size; i++) {if (data[i].equals(obj)) {//从i+1开始,将后面的元素往前移动一位(删除下标为i的元素)System.arraycopy(data, i + 1, data, i, size - i - 1);flag = true;break;}}if (!flag) return false;data[--size] = null;size--;return true;}public int size() {return size;}@Overridepublic String toString() {StringBuilder sb = new StringBuilder("[");for (int i = 0; i < size; i++) {sb.append(data[i]).append(",");}sb.deleteCharAt(sb.lastIndexOf(","));sb.append("]");return sb.toString();}
}

2. LinkedList

实现了List接口,底层是双向链表

  • 优点:插入或删除元素的性能较好,适合频繁进行首尾插入和删除操作的场景。
  • 缺点:读取元素时需要从头或尾开始遍历链表,性能较差,不适合需要随机访问元素的场景。
package api;import java.util.ArrayList;
import java.util.LinkedList;public class LinkedListTests {public static void main(String[] args) {LinkedList<Integer> list=new LinkedList<>();list.add(100);list.add(200);//在头部添加list.addFirst(500);//在尾部添加list.addLast(600);System.out.println(list);//移除头部元素,返回值为被移除的元素Integer first = list.removeFirst();//移除尾部元素,返回值为被移除的元素Integer last = list.removeLast();System.out.println("first="+first+";last="+last);System.out.println(list);System.out.println(list.contains(Integer.valueOf(200)));}
}

(2) Set

HashSet
实现了Set接口,不允许元素重复,无序
添加、查询和删除等操作都具有较高的效率

package api;import java.util.Collection;
import java.util.HashSet;
import java.util.Set;public class HashSetTests {public static void main(String[] args) {Collection c1=new HashSet();c1.add("one");c1.add("one");//不会添加重复元素c1.add("two");System.out.println(c1.size());System.out.println(c1);Set<Integer> c2=new HashSet<>();c2.add(100);c2.add(100);c2.add(200);c2.add(200);System.out.println(c2);c2.remove(200);System.out.println(c2);}
}

三、Map

键值对方式存储

1.HashMap

底层数据结构是散列桶(数组、链表、红黑树),数组用于存储桶,桶里装着一个链表或红黑树。
java8之后,链表为了解决哈希冲突,链表长度大于8之后会转换为红黑树,红黑树的节点小于6时会转换为链表。取8为临界值是因为可以更好的平衡时间和空间复杂度。
**特点:**无序,键和值都允许为null,非同步,不是线程安全的
put()方法插入键值对
get() 方法获取指定键对应的值
remove() 删除指定键的值
遍历:

//键值对的方式for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println("键: " + entry.getKey() + ", 值: " + entry.getValue());}//键找值的方式
//所有key取出来存到一个Set集合中
Set<String> keySet = map.keySet();//迭代器遍历
Iterator<Map.Entry<String,Integer>> iterator = entrySet.iterator();
While (iterator.hasNext()) {Map.Entry<String,Integer> entry = iterator.next();String key = entry.getKey();Integer value = entry.getValue();System.out.println(key+","+value);
}

2. TreeMap

底层是红黑树
**特点:**数据有序,比HashMap多实现了NavigableMap接口,非同步

三、Iterator接口

常见方法
hasNext() 判断是否还有下一个元素,boolean类型
next()获取当前指针指向的元素,调用移动指针

Collection c = new ArrayList();c.add(100);c.add(200);c.add("Hello kugou");Iterator iterator = c.iterator();while (iterator.hasNext()){Object obj = iterator.next();;System.out.println(obj);}

Collections工具类

1.对集合元素进行排序

List<Integer> List = Arrays.asList(array);数组转换为List
Collections.sort(list);
System.out.println(list);//实现Comparable接口
package api;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;class Student implements Comparable<Student>{private String name;private int score;public Student(String name,int score){this.name=name;this.score=score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", score=" + score +'}';}/*** 当我们使用Collections的sort方法进行排序时,* 底层会调用待排序对象内部的compareTo方法* @param o the object to be compared.* @return 0表示等于,负数小于,正数表示大于*/@Overridepublic int compareTo(Student o) {return this.score-o.score;}
}
/*** 通过Collections对多个学生按成绩进行排序.*/
public class CollectionSortDemo02 {public static void main(String[] args) {List<Student> list=new ArrayList<>();list.add(new Student("Tony",91));list.add(new Student("Mike",90));list.add(new Student("Jack",97));Collections.sort(list);System.out.println(list);}
})

2.基于Comparator,自定义方法(内部类)进行排序

package api;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;/**电影对象类型*/
class Film{private String name;private int score;public Film(String name,int score){this.name=name;this.score=score;}public int getScore() {return score;}@Overridepublic String toString() {return "Film{" +"name='" + name + '\'' +", score=" + score +'}';}
}
public class CollectionSortDemo03 {public static void main(String[] args) {Film f1=new Film("马尔扎哈",90);Film f2=new Film("阿斯特拉",87);Film f3=new Film("魔童哪吒",93);List<Film> list=new ArrayList<Film>();list.add(f1);list.add(f2);list.add(f3);Collections.sort(list,new Comparator<Film>(){@Overridepublic int compare(Film o1,Film o2){return o1.getScore()-o2.getScore();}});System.out.println(list);}
}   

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

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

相关文章

Oracle 用户权限与对象权限详解

一、权限体系概述 Oracle 数据库的权限管理是保障数据安全的核心机制&#xff0c;主要分为系统权限&#xff08;System Privileges&#xff09; 和对象权限&#xff08;Object Privileges&#xff09; 两大类&#xff1a; 系统权限&#xff1a;赋予用户在数据库中执行特定操作…

kubectl get pods 时 “client-side throttling, not priority and fairness“ 原因初探

1. 问题起源 在kubernetes里&#xff0c;使用kubectl get pods 时&#xff0c;返回 I0508 05:43:04.655602 100742 request.go:668] Waited for 1.178494016s due to client-side throttling, not priority and fairness, request: GET:https://10.103.0.1:443/apis/cert-ma…

力扣网C语言编程题:位运算来解决 “寻找重复数”

一. 简介 前面两篇文章解决力扣网上"查找重复数"的题目&#xff0c;提供了三种思路&#xff1a;哈希表、二分法和快慢指针。文章如下&#xff1a; 力扣网C语言编程题&#xff1a;“寻找重复数”的两种思路-CSDN博客 力扣网C语言编程题&#xff1a;快慢指针来解决 …

3D视觉感知

目录 3D视觉感知任务 单目3D感知 单目3D物体检测 – 直接预测3D信息 单目3D物体检测 – 总结 单目深度估计 双目3D感知 多目3D感知 3D视觉感知任务  输入&#xff1a;单摄像头或多摄像头生成的图像数据  单张图像  图像序列  输出  稀疏&#xff1a…

es中常规的根据字段查询时走什么索引(说明:「常规的根据字段查询」不包含分词查询)

在Elasticsearch中&#xff0c;“常规的根据字段查询”且不涉及分词的查询&#xff08;如精确匹配、范围查询&#xff09;&#xff0c;主要依赖以下索引机制&#xff1a; 一、核心索引类型及适用场景 字段类型索引结构典型查询方式应用场景keyword倒排索引&#xff08;未分词…

MYSQL如何插入数据,效率会更高

在MySQL中&#xff0c;插入数据的效率可以通过多种方式逐步提升。以下是从简单到复杂的优化路径&#xff0c;帮助你逐步提高数据插入的性能&#xff1a; 一、基础插入&#xff1a;逐条插入 这是最基础的插入方式&#xff0c;适用于少量数据的插入操作。虽然简单&#xff0c;但…

Rabbitmq的五种消息类型介绍,以及集成springboot的使用

交换机类型 Fanout Exchange 扇型交换机&#xff0c;这个交换机没有路由键概念&#xff0c;就算你绑了路由键也是无视的。 这个交换机在接收到消息后&#xff0c;会直接转发到绑定到它上面的所有队列 Direct Exchange 直连型交换机&#xff0c;根据消息携带的路由键将消息投递…

日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(4):2022年12月2023年12月

日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段&#xff08;4&#xff09;&#xff1a;2022年12月&2023年12月 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰&#xff08;3&#xff09;真题训练 2、2个卷的单词部分1、 真题-2023年…

从代码学习深度强化学习 - Actor-Critic 算法 PyTorch版

文章目录 前言算法原理1. 从策略梯度到Actor-Critic2. Actor 和 Critic 的角色3. Critic 的学习方式:时序差分 (TD)4. Actor 的学习方式:策略梯度5. 算法流程代码实现1. 环境与工具函数2. 构建Actor-Critic智能体3. 组织训练流程4. 主程序:启动训练5. 实验结果总结前言 在深…

Python 数据分析与可视化 Day 8 - Pandas 高级操作技巧

✅ 今日目标 掌握 Pandas 的索引体系&#xff08;Index / MultiIndex&#xff09;使用 set_index() 和 reset_index() 管理数据索引理解 pivot_table 与 melt、stack/unstack 重塑数据形态初步理解“宽表”与“长表”在数据分析与可视化中的应用场景 &#x1f4da; 一、深入理…

Spring Boot整合百度AI人脸比对实战

目录 一、简述 二、依赖 三、代码步骤 3.1 实体注入 3.2 服务实现 3.3 其它实现 四、小结 欢迎来到 盹猫(>^ω^<)的博客 本篇文章主要介绍了 [Spring Boot整合百度AI人脸比对实战] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 一、简述 人脸识别在日…

使用 pip 安装 numpy 包卡在 Preparing metadata 阶段问题解决

TOC 1 问题描述 使用 pip 安装numpy卡在下面最后一行的阶段&#xff1a; Collecting numpy1.26.4 (from -r requirements.txt (line 2))Using cached https://mirrors.aliyun.com/pypi/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-…

新手向:Anaconda3的安装与使用方法

我们在刚开始接触Python时使用的是Python的直接编译器,如果我们需要进行其他的项目编写往往需要使用另一个版本的Python ,这样反复的下载很是麻烦并且还会造成系统变量的紊乱.这次我们引入Anaconda3,可创建虚拟的Python环境,满足不同项目的需要,当不用的时候可以直接放心删除不…

C#中的设计时构造函数

以下是关于设计时构造函数的详细整理&#xff0c;包括定义、适用场景、相关概念和实际应用&#xff1a; 一、设计时构造函数的定义 设计时构造函数&#xff08;Design-time Constructor&#xff09;是专门为开发工具&#xff08;如Visual Studio、Blazor Designer等&#xff0…

Spring Boot 2.x 项目搭建 (一)

以下是基于Spring Boot 2.x&#xff08;兼容JDK 1.8&#xff09;的项目搭建指南及Markdown文档生成方案&#xff0c;整合了多个搜索结果中的最佳实践&#xff1a; 一、项目初始化 1. 使用Spring Initializr创建项目 步骤&#xff1a; 访问 start.spring.io 或通过IDE&#x…

Kotlin作用域函数:掌握apply/let/run/with/also精髓

一、作用域函数详解 1. apply&#xff1a;对调用对象进行配置或操作&#xff0c;并返回该对象本身。 接收者引用&#xff1a;this&#xff08;可省略&#xff0c;直接调用接收者成员&#xff09;返回值&#xff1a;接收者对象本身&#xff08;T&#xff09;核心用途&#xff…

Spring Boot监视器:应用监控终极指南

Spring Boot 监视器详解 Spring Boot 监视器(Monitor)是用于监控和管理 Spring Boot 应用程序运行状态的核心组件,主要通过 Spring Boot Actuator 和 Spring Boot Admin 两大工具实现。 一、核心监视器组件 1. Spring Boot Actuator 功能定位:提供应用程序内部运行状态的原…

SpringBoot 中 @Transactional 的使用

SpringBoot 中 Transactional 的使用 一、Transactional 的基本使用二、Transactional 的核心属性三、使用避坑&#xff08;失效场景&#xff09;3.1 自调用问题3.2 异常处理不当3.3 类未被 Spring 管理3.4 异步方法内使用失效 四、工作实践4.1 事务提交之后执行一些操作4.2 事…

6.26_JAVA_微服务_Elasticsearch

1、ES文档中keyword意思是&#xff1a;字符串&#xff0c;但不需要分词 2、ES细节CreateIndexRequest request new CreateIndexRequest("items");会让你导包&#xff0c;会有两个选择&#xff1a; import org.elasticsearch.action.admin.indices.create.CreateInd…

Java 大视界 -- 基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(324)

Java 大视界 -- 基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用&#xff08;324&#xff09; 引言&#xff1a;正文&#xff1a;一、Java 驱动的能源数据采集与预处理基建1.1 多源异构数据合规接入层&#xff08;ISO 50001IEC 61850 双标准适配&#x…