java中的集合/容器的数据结构
最近双11在网上买了本 数据结构和算法——java语言实现,正在啃,同时在慕课网上的学习进度来到了集合框架这一类,对于这一块算是刚刚了解,本科的时候数据结构学习的是严蔚敏老师的那本数据结构,代码的实现貌似全部是伪代码,记得在期末考试的时候狠狠的通读了一遍,当时对于几个常见的数据结构队列、数组、栈、堆的一些方法还是比较熟悉,但是一直以来心里一直有个疑问,因为书上的都是伪代码,具体实现的方法并没有给出实例化,后来直到现在开始学习java语言,希望可以在之前理解的情况下,通过对于书籍上java代码的实现能够更好的理解数据结构! 刚才偶然看见一个博客上关于java语言数据结构的分析,真知灼见, 放在自己的博客里慢慢品读。
对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步。首先、java中为何需要集合的出现?什么需求导致。我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的操作、存储就出现了集合,集合应该是存储对象最常用的一种方式了,相对于数组更灵活,可变长度。同时集合也只能存储对象不能使基本数据类型。
集合框架分为两个派系Collection和Map而每一种集合类型都是基于特定的数据结构,Collection接口继承了Iterable接口所以可以使用Iterable接口的iterator()方法了返回值是一个Iterator接口类型这也就是Collection集合中的迭代器,迭代器就是一种集合元素的去除方式可以直接访问集合中的元素,它定义在集合内部就是为了更加方便的取出集合中的元素它可以取出和删除集合中的元素(next(),remove())并且在使用迭代器操作数据的时候不可以使用集合本身的方法对集合进行操作,因为迭代器已经定义好了对于集合的后续操作迭代器操作的就不是之前定义好的集合了,这就冲突了。而它的子接口ListIterator可以对集合中的元素进行增删改查操作(其实就是操作的集合中存储的对象引用,并不是真正对象本身,因为集合中存储的就是对象的引用地址)。
Collection接口又分为List和Set接口,对应的List接口比较常用的就是ArrayList和LinkedList两个实现类了。ArrayList类的底层数据结构(就是数据存放的方式)就是一个数组接口,它是有序的带有角标索引的并且是可以重复的而LinkedList类底层是一个链表数据结构,他们判断元素是否相同都是使用的equals方法相对于ArrayList它对于集合数据的增删操作数据是更快的因为只需要首尾关系调整,而对于ArrayList则需要重新调整索引,所以对于大数据量的增删操作还是LinkedList效率高一些而查询操作ArrayList更快他们都是现成不同步的(ArrayList取代了Vector)。Set接口常用的就是HashSet和TreeSet两个类,HashSet底层是一个哈希表的接口它无序、不可重复、线程不同步,而判断元素是否相同使用的就是hashCode方法返回是否为0如果为0还会判断equals方法看返回是否为true。TreeSet底层是一个二叉树结构是一个有序的不可重复也是线程不同步的集合它保证数据唯一性的方式就是compareTo方法是否返回0,TreeSet排序集合有两种方式:1、让存储的元素本身具备比较性也就是实现Comparable接口覆盖compareTo方法。2、自定义比较器实现Comparator接口自定义compareTo方法然后把该比较器作为参数出入TreeSet的构造方法中是TreeSet初始化时就具备了比较性。
Map接口是和Collection接口平级的接口,Map接口存储的是一个key-value形式的映射关系所以对于需要存储映射关系的数据首选Map,Map常用的类型有HashMap和TreeMap,HashMap底层数据结构也是哈希表是可以使用null存储的也是线程不同步的这也就取代了HashTable的线程不同步,不可存储null值、TreeMap底层也是二叉树数据结构,同样的Map的取出数据的方式都是使用entrySet()方法返回Set集合再使用迭代器取出或者是增强for循环(实现了Iterable接口的集合都可以使用foreach进行循环),entrySet返回的映射关系就是一个Map.Entry类型因为Entry其实就是定义在Map中,为什么要这么做呢?因为只有有了Map集合,有了键值对才有键值对的映射关系,关系属于集合中的内部事物这个事有直接访问集合中的元素。实际应用中我想更多的是map的嵌套。
工具类(Collections、Arrays)Collections集合工具类就是一个操作结合的专门工具类里面定义的都是静态方法,可以对于List集合进行各种排序二分查找等(类比字符串操作)还可以把线程不安全的转成线程安全的,同样的Arrays是一个操作数组的工具类里面定义的也都是静态方法用于数组的各种操作(toString打印数组元素、asList转成list等)
java中的集合/容器的数据结构的更多相关文章
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- Java中的集合框架(上)
Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的 ...
- Java中的集合框架-Collection(二)
上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...
- java中的集合和视图
一.集合的概念 何为集合,集合就是相当于一个对象的容器.集合是类似数组的一个作用.既然有了数组,为何还要有集合呢,由于数组对象一旦创建,其大小便不可以更改,我们只能往数组中存放创建时数量的对象.而集合 ...
- Java面试题:Java中的集合及其继承关系
关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可: 1.List.Set.Map是否继承自Collection接口? List.Set ...
- Java中的集合List、ArrayList、Vector、Stack(三)
List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...
- Java中的集合(五)继承Collection的List接口
Java中的集合(五)继承Collection的List接口 一.List接口简介 List是有序的Collection的,此接口能够精确的控制每个元素插入的位置.用户能够根据索引(元素在List接口 ...
- java中的集合操作类(未完待续)
申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...
- Java中的集合概述
Java中的集合类有两个重要的分支,分别是接口Collection(包括List,Set等)和接口Map. 由于HashSet的内部实现原理使用了HashMap,所以我们先来了解Map集合类. 1.H ...
随机推荐
- jstack工具查看系统线程问题
背景: 最近在做项目系统的异常测试,项目依赖于nkv,需要模拟依赖组件nkv异常时系统的响应及性能情况.通过tc工具模拟当服务器发送到nkv的请求超时时系统的响应.发现接口返回错误率100%,查看服务 ...
- Swift-代理
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px "Helvetica Neue"; color: #535b60; bac ...
- 使用vlc播放器做rtsp流媒体服务器
可参考: 使用vlc播放器播放rtsp视频 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器做rts ...
- Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)
https://github.com/musicode/test/issues/5 Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误: ERROR: failed to open ...
- UUID库
If you cannot afford to use Boost, then there is a very minimal library that I implemented which sim ...
- php程序 注册机制
密码加密方式 1.直接md5加密 2.md5和随机数(也可以是固定参数,如(Rfd4WE784)) 3.md5(md5) 4. 参考 function sp_password($pw,$authcod ...
- icomoon图标的使用
这里的图标可以自己定义 网址:https://icomoon.io/app/#/select/ 定义完后,自己下载下来 引用: <link href="css/style.css ...
- telnet 传输文件
用python创建个临时服务器,发送文件供telnet访问 import socket import base64 port = 10005 filename = 'libcrypto.so.1.0. ...
- C和指针 第十五章 错误报告perror和exit
15.1 错误报告 perror 任何一种程序都存在出错的可能,包括系统的函数库,当出现错误时,系统提示发生错误,标准库函数在一个外部整型变量中保存错误代码,然后把错误代码传给用户程序,提示错误原因. ...
- JS学习:第一周——NO.4继承
1.[关于call] 作用:是用来改变this指向的,有两种参数 第一种:第一个参数,用来改变this指向 第二种:给call前面的函数传参,从第二个参数开始,给call前面的函数从左到右一个个的传参 ...