当前位置: 首页 > news >正文

java-集合框架

认识集合

  • 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。

集合体系结构

Conllection 单列集合

  • Conllection代表单列集合,每一个元素只包含一个值。

Map 双列集合

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

Conllection集合特点

  • List系列元素:添加的元素是有序,可重复,有索引。

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

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

    • HashSet:无序,不重复,无索引。

    • LinekdHashSet:有序,不重复,无索引。

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

package YMP.Study.Class.collection;
​
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
​
public class CollectionDemo01 {public static void main(String[] args) {//目标:搞清楚Collection集合的整体特点//1.List家族的集合:有序,可重复,有索引。ArrayList<String> list=new ArrayList<>();list.add("Java");list.add("Java");list.add("C");list.add("C++");System.out.println(list);
​String rs=list.get(0);System.out.println(rs);
​//2.Set家族的集合:无序,不可重复,无索引。Set<String> set=new HashSet<>();set.add("Java");set.add("Java");set.add("C");set.add("C++");set.add("鸿蒙");System.out.println(set);
​
​
​
​}
}
​

小结

Collection集合

常用功能

  • Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。

package YMP.Study.Class.collection;
​
import java.util.ArrayList;
import java.util.Collection;
​
public class CollectionDemo02 {public static void main(String[] args) {//目标:搞清楚Collection提供的通用功能。Collection<String > list=new ArrayList<>();
​//添加元素list.add("张三");list.add("李四");list.add("王五");System.out.println(list);
​
​//获取集合的元素个数System.out.println(list.size());
​//删除集合元素list.remove("李四");System.out.println(list);
​//判断集合是否为空System.out.println(list.isEmpty());​//判断集合中是否存在某个数据System.out.println(list.contains("张三"));//把集合转换为数组Object[] arr=list.toArray();System.out.println(arr);String [] arr2=list.toArray(String[]::new);System.out.println(arr2);
​//清空集合list.clear();System.out.println(list);
​}
}
​

List集合

list集合特点:

有序,可重复,有索引

ArrayList:有序,可重复,有索引

LinkedList:有序,可重复,有索引

底层实现不同!适合场景不同。

  • List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也继承了。

package YMP.Study.Class.List;
​
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
​
public class listDemo01 {public static void main(String[] args) {//目标:掌握List系列集合独有的功能List<String > names=new ArrayList<>();
​
​//添加数据names.add("张三");names.add("李四");names.add("王五");names.add("赵六");System.out.println(names);
​//给第三个位置插入一个数据,熊小涛names.add(2,"熊小涛");
​System.out.println(names);
​
​//删除李四names.remove(1);System.out.println(names);
​//把王五修改为金毛names.set(2,"金毛");System.out.println(names);
​//获取张三System.out.println(names.get(0));
​
​//1.for循环for (int i=0;i<names.size();i++){System.out.println(names.get(i));}
​//2.迭代器Iterator<String > it=names.iterator();while (it.hasNext()){String name=it.next();System.out.println(name);}
​//3.增强forfor (String name:names){System.out.println(name);}}
}
​

ArrayList和LinkedList的区别

  • ArrayList底层是基于数组存储数据的。

  • LinkedList底层是基于链表存储数据的。

数组的特点

  • 查询速度快(是根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据包耗时相同。

  • 增删数据效率低:可能需要把后面很多的数据进行前移。

链表的特点

  • 链表中的数据是一个一个独立的结点组成的,结点在内存中是不连续的,每个结点包含数据值和下一个结点的地址。

  • 链表的特点1:查询慢,无论查询哪个数据都要从头开始找。

  • 链表的特点2:链表增删相对快。

LinkedList是基于双链表实现的。

  • 特点:对首尾元素进行增删改查的速度是极快的。

LinkedList新增了:很多首尾操作的特有方法

在Java中,LinkedList 类是 List 接口的一个实现,它除了提供了基本的列表操作外,还针对首尾元素的操作进行了优化,提供了更高效的方法。下面我将通过示例代码展示如何使用 LinkedList 进行首尾元素的操作。

添加元素到首尾

  1. 向链表末尾添加元素:可以使用 add(E element) 方法,这是 List 接口提供的,但在 LinkedList 中特别高效,因为它只需要改变尾节点的引用。

  2. 向链表开头添加元素:可以使用 addFirst(E element) 方法,这是 LinkedList 类特有的方法,它在列表的开头插入指定的元素。

import java.util.LinkedList;
​
public class LinkedListDemo {public static void main(String[] args) {// 创建一个 LinkedListLinkedList<String> linkedList = new LinkedList<>();
​// 向链表末尾添加元素linkedList.add("End Element");System.out.println("After adding at end: " + linkedList);
​// 向链表开头添加元素linkedList.addFirst("First Element");System.out.println("After adding at start: " + linkedList);}
}

删除首尾元素

  1. 删除并返回链表的第一个元素:可以使用 removeFirst() 方法,如果链表为空,则会抛出 NoSuchElementException 异常。

  2. 删除并返回链表的最后一个元素:可以使用 removeLast() 方法,同样,如果链表为空,也会抛出异常。

// 继续上面的代码示例
public static void main(String[] args) {// ... 上面的代码 ...
​// 删除并返回第一个元素String firstElement = linkedList.removeFirst();System.out.println("Removed first element: " + firstElement);System.out.println("After removing first: " + linkedList);
​// 删除并返回最后一个元素String lastElement = linkedList.removeLast();System.out.println("Removed last element: " + lastElement);System.out.println("After removing last: " + linkedList);
}

这些方法使得在需要频繁进行首尾元素操作的场景下,LinkedList 相较于其他 List 实现(如 ArrayList)具有更高的效率。

LinkedList可以用来设计栈

package YMP.Study.Class.List;
​
import java.util.LinkedList;
​
public class listDemo02 {public static void main(String[] args) {//目标:用LinkedList做一个对象LinkedList<String> queue=new LinkedList<>();
​//入队queue.addLast("赵敏");queue.addLast("西门吹雪");queue.addLast("菠萝吹雪");queue.addLast("橙留香");System.out.println(queue);
​
​//出队System.out.println(queue.removeFirst());System.out.println(queue.removeFirst());System.out.println(queue);
​
​System.out.println("--------------------------");
​
​//做一个栈LinkedList<String> stack=new LinkedList<>();
​//压栈stack.push("第一颗子弹");stack.push("第二颗子弹");stack.push("第三颗子弹");stack.push("第四颗子弹");System.out.println(stack);
​//出栈System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack);
​}
}
​

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【AI绘画】Midjourney前置指令/settings设置详解
  • pdf解密软件哪个好用?掌握3个方法,轻松解锁PDF自由查看!
  • Python 爬虫 示例
  • Python测试框架之—— pytest介绍与示例
  • 02 vue3之ref全局桶
  • iOS工程:获取手机相册权限,iOS原生系统弹窗, Privacy隐私政策选择,如何添加系统弹出并修改描述文字
  • -- 数据结构 顺序表 --Java
  • TCP并发服务器多线程和多进程方式以及几种IO模型
  • 【Python】copy()浅拷贝与深拷贝
  • 【牛客_c++_string】HJ1字符串最后一个单词的长度
  • Spring Boot使用拦截器(Interceptor)
  • mysql中group by语句使用
  • 结果一。6.will,begoingto,betodo,beabouttodo结构的区别
  • 在CentOS 7上安装MongoDB的方法
  • ROS imu传感器节点
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • css的样式优先级
  • echarts的各种常用效果展示
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • iOS 颜色设置看我就够了
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS字符串转数字方法总结
  • python学习笔记 - ThreadLocal
  • Redash本地开发环境搭建
  • 前端_面试
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 微信小程序--------语音识别(前端自己也能玩)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 硬币翻转问题,区间操作
  • 自制字幕遮挡器
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • linux 淘宝开源监控工具tsar
  • Linux权限管理(week1_day5)--技术流ken
  • #define、const、typedef的差别
  • (vue)页面文件上传获取:action地址
  • (八十八)VFL语言初步 - 实现布局
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) ns2/nam与nam实现相关的文件
  • (转)ORM
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .bat文件调用java类的main方法
  • .Net Core 生成管理员权限的应用程序
  • .NET Project Open Day(2011.11.13)
  • .NET 发展历程
  • .net开发引用程序集提示没有强名称的解决办法
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • :=