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

Java学习19-List、set容器

目录

一.List:

1.List基本介绍:

2.List接口方法:

3.List的三种遍历方式:

4.ArrayList:

(1)ArrayLis的基本介绍:

(2)ArrayList底层结构和源码分析:

5.Vector:

(1)Vector基本介绍:

(2)Vector底层结构与ArrayList的比较:

6.LinkedList:

(1)LinkedList的基本介绍:

(2)LinkedList的底层操作机制:

7.ArrayList和LinkedList的比较:

二.set:

1.基本介绍:

2.遍历Set:

3.HashSet:

(1)HashSet全面说明:

(2)HashSet扩容机制:

4.LinkedHashSet:

(1)基本介绍:

(2)底层机制:


一.List:

1.List基本介绍:

  • List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复。
  • List集合中的每个元素都有其对应的顺序索引,即支持索引。
  • List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

2.List接口方法:

3.List的三种遍历方式:

//通过静态方法,对Book对象按照价格升序进行排序
public static void main(String[] args) {public static void sort(List list){for (int i =0;i<list.size()-1;i++){for (int j =0;j<list.size()-1-i;j++){Book book1 = (Book)list.get(j);Book book2 = (Book)list.get(j+1);if(book1.getPrice()>book2.getPrice()){list.set(j,book2);//set方法实现交换list.set(j+1,book2);}}}}}

4.ArrayList:

(1)ArrayLis的基本介绍:
  • ArrayList是由数组来实现数据存储的,ArrayList可以加入多个null。
  • ArrayList基本等同于Vector,除了ArrayList是线程不安全的。
(2)ArrayList底层结构和源码分析:

5.Vector:

(1)Vector基本介绍:
  • Vector底层是一个对象数组,Vector是线程同步的,即线程安全。
(2)Vector底层结构与ArrayList的比较:

6.LinkedList:

(1)LinkedList的基本介绍:
  • LinkedList底层实现了双向链表和双端队列。
  • 可以添加任何元素(元素可以重复),包括null。
  • 线程不安全,没有实现同步。
(2)LinkedList的底层操作机制:

7.ArrayList和LinkedList的比较:

二.set:

1.基本介绍:

set接口是无序的(添加和取出的顺序不一致),没有索引。不允许重复元素,所以最多包含一个null。

2.遍历Set:

        //迭代器Iterator iterator = set.iterator();while (iterator.hasNext()){Object obj = iterator.next();System.out.println(obj);}//增强forfor (Object obj:set){System.out.println(obj);}set.remove(null);

3.HashSet:

(1)HashSet全面说明:
  • HashSet实现了Set接口,实际上是HashMap(数组+链表+红黑树)。
  • 可以存放null,但是只能有一个null。(不能有重复元素、对象)
  • HashSet不保证元素是有序的,取决于Hash后,再确定索引的结果。
(2)HashSet扩容机制:

4.LinkedHashSet:

(1)基本介绍:
  • LinkedHashSet是HashSet的子类,LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表。
  • LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的(有序的)。
  • LinkedHashSet不允许添加重复元素。
(2)底层机制:

相关文章:

  • 【云原生 | 60】Docker中通过docker-compose部署kafka集群
  • python-web应用程序-Django-From组件
  • jeecg dictText字典值
  • C++:栈(stack)、队列(queue)、优先级队列(priority_queue)
  • 【计算机毕设】基于SpringBoot的民宿在线预定平台设计与实现 - 源码免费(私信领取)
  • Java算法篇之二分查找模板
  • C++ Thread多线程并发记录(3)线程创建总结
  • 基础—SQL—DML(数据操作语言)修改和删除
  • 力扣----轮转数组
  • 重学java 61.IO流 ② 字节输出流
  • 【面试宝藏】Redis 常见面试题解析
  • 如何通过PHP语言实现远程控制多路照明
  • 利用BeanFactoryPostProcessor让Bean提前被创建
  • 汽车IVI中控开发入门及进阶(二十四):杰发科技AC8015
  • 高通Android 12/13实现USB拔出关机功能
  • “大数据应用场景”之隔壁老王(连载四)
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • AWS实战 - 利用IAM对S3做访问控制
  • Computed property XXX was assigned to but it has no setter
  • export和import的用法总结
  • Java 内存分配及垃圾回收机制初探
  • Java小白进阶笔记(3)-初级面向对象
  • leetcode46 Permutation 排列组合
  • Lsb图片隐写
  • Mithril.js 入门介绍
  • Python实现BT种子转化为磁力链接【实战】
  • 阿里云Kubernetes容器服务上体验Knative
  • 电商搜索引擎的架构设计和性能优化
  • 深入浏览器事件循环的本质
  • 时间复杂度与空间复杂度分析
  • 我有几个粽子,和一个故事
  • 一些css基础学习笔记
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #Ubuntu(修改root信息)
  • $jQuery 重写Alert样式方法
  • (11)MSP430F5529 定时器B
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (19)夹钳(用于送货)
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (四)js前端开发中设计模式之工厂方法模式
  • (已解决)vscode如何选择python解释器
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .java 9 找不到符号_java找不到符号
  • .NET Core WebAPI中封装Swagger配置
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 设置默认首页
  • .NET 通过系统影子账户实现权限维持
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?