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

java中容器的学习与理解

  以前一直对于java中容器的概念不理解,虽然学习过,但始终没有认真理解过,这几天老师提出了这样一个问题,你怎么理解java中的容器。瞬间就蒙了。于是各种搜资料学习了一下,下面是我学习后整理出来的的一些心得。欢迎各路大神指教

  在书写程序时,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一个数据容器中

java容器的组成

  一、Collection接口:定义了存取一组对象的方法,他的子接口Set和List分别定义了存取方法。Set中的数据对象没有顺序且不可重复List中的数据对象有顺序且可重复。List又被细分为LinkedList和ArrayList,LinkedList以链表的方式来存取数据ArrayList是以数组方式来存储数据

Collection接口定义的方法
返回值方法名(参数类型 参数)描述
int size()容器中对象的数目
booleanisEmpty()是否为空
voidclear()清空
booleancontains(Object element)是不是包含element对象
booleanadd(Object element)添加element的对象
booleanremove(Object element)移除element对象
Iteratoriterator()返回一个Iterator对象,用于遍历容器中的对象
booleancontainsAll(Collection c)是否包含c容器中的所有对象
booleanaddAll(Collection c)把c容器中的所有对象添加到容器中
booleanremoveAll(Collection c)从容器中移除C容器中存在的所有对象
booleanretainAll(Collection c)求当前的集合类与C容器的交集
Object[]toArray()把容器中的所有对象转换到对应的数组中

 

    1、List:List容器的中的元素没有顺序,可以重复。List容器中的元素都对应一个整型序号记载着其在容器中的位置。List主要分为ArrayList和LinkedList,Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。Stack是满足“后进先出”规则的容器。

List常用方法
返回值方法名(参数类型 参数)描述
voidsort(List)对List中的元素进行排序
voidshuffle(List)对List中的元素进行随机排序
voidreverse(List)对List中的元素进行逆袭排序
voidfill(List, Object)用一个特定的对象重写List容器
voidcopy(List dest, List src)将src容器中的元素拷贝到dest容器中
intbinarySearch(List, Object)对顺序的List容器,采用折半查找法寻找特定的对象

       (1).LinkedList:其数据结构采用的是链表,这种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。可以实现所有的栈功能。

       (2).ArrayList:是一个可以动态增长的数组,其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。(底层是数组)

    2、Set:Set接口没有提供额外的方法,但实现了Set接口的容器类中的元素是没有顺序,并且不可以重复的。Set容器类似于数学中集合的概念。

       (1).HashSet:Set类不允许其中存在重复的元素(集),无法添加一个重复的元素。HashSet利用Hash函数进行了查询效率上的优化,其中contain()方法经常被调用,以用于判断相关元素是否被添加过。

       (2).TreeSet:底层使用的是红黑树。

    3、Queue(队列):是一个满足“先进先出”的数据结构。

LinkedList提供了方法支持队列操作,并实现了Queue接口,所以LinkedList是队列的一种实现。

  二Map接口:Map提供的是一种键值对的方式存储数据(键和值之间是一一对应的),Map的键值都可以为null。Map可以多维扩展,例如一个人拥有多个宠物,可以这样定义:Map<Person,List<pet>>

Map常用方法
返回值方法名(参数类型 参数)描述
Objectput(Object key, Object value)添加元素
Objectget(Object key)取出键值key对应的value值
Objestremove(Object key)移除键值key对应的value值
booleancontainsKey(Object key)判断Map容器中是否存在键值key
booleancontainsValue(Object value)判断Map中是否存在value值
int size()返回Map容器的长度
booleanisEmpty()判断Map容器是否为空
voidclear()清空Map容器

 

    (1)HashMap:提供了key-value的键值对的数据存储机制,可以很方便的通过键值查找相应的元素,而且通过Hash散列机制,查找很方便。

  Iterator接口:是一对象可以遍历并选择序列中的对象所有实现了Collection接口的容器都有一个iterator方法,用于返回一个实现了Iterator的对象。Iterator对象为迭代器,用于实现对容器中元素的遍历。

感谢为我提供学习资料、博客的大神们!!

转载于:https://www.cnblogs.com/lcl-dcr/p/7658585.html

相关文章:

  • 华为C8650 手机带电脑上网 / 电脑带手机上网
  • Android零基础入门第75节:Activity状态和生命周期方法
  • Android之String国际化对照表
  • 2.3 js刷新页面所有 我的程序猿之路:第十三章
  • redisCheckMem脚本
  • 搜索引擎技术之概要预览
  • 从BLOG到电子书——把wordpress备份的WXR转为epub
  • 【数据结构栈和队列】之十队列顺序存储结构
  • ORA-00980: synonym translation is no longer valid, version 9
  • [原创] css中的绝对定位和相对定位
  • 页面触底自动加载数据
  • SSL配置及练习
  • 从上百幅架构图中学得半点大型网站建设经验(上)
  • jquery选择器
  • 深切悼念苹果的老大乔布斯
  • Android 架构优化~MVP 架构改造
  • css系列之关于字体的事
  • es6
  • Java 网络编程(2):UDP 的使用
  • JavaWeb(学习笔记二)
  • JSONP原理
  • k个最大的数及变种小结
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端
  • 前端性能优化——回流与重绘
  • 巧用 TypeScript (一)
  • 如何学习JavaEE,项目又该如何做?
  • 深入浅出Node.js
  • 探索 JS 中的模块化
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​ubuntu下安装kvm虚拟机
  • #162 (Div. 2)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #单片机(TB6600驱动42步进电机)
  • (3)nginx 配置(nginx.conf)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (力扣)1314.矩阵区域和
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Unity3DUnity3D在android下调试
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)hibernate缓存
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net6 Api Swagger配置
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决