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.util包中! 在java中常用的是Set,Map,和List. 容器和迭代器 链表 集 映射
- 【集合】Java中的具体集合(一)
Java中不止提供了集合框架中的接口,还提供了许多具体的实现. Java中的具体集合 集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行 ...
- [转]详细介绍java中的数据结构
详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...
- 详细介绍java中的数据结构
详细介绍java中的数据结构 http://developer.51cto.com/art/201107/273003.htm 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个 ...
- Java中的数据结构及排序算法
(明天补充) 主要是3种接口:List Set Map List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模 ...
- Java中的数据结构-HashMap
Java数据结构-HashMap 目录 Java数据结构-HashMap 1. HashMap 1.1 HashMap介绍 1.1.1 HashMap介绍 1.1.2 HashMap继承图 1.2 H ...
- Java中如何克隆集合——ArrayList和HashSet深拷贝
编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- Java中的List集合和迭代器
一.Java中的List集合. 终于有时间来好好整理一下Java中的集合. 首先要讲的就是List集合.Java中List集合主要将两个: 第一个是底层使用数组维护的ArrayList,第二个是底层是 ...
随机推荐
- phonegap android 输入法弹出会遮盖表单框的解决办法
phonegap android 当页面内容比较多,表单超出屏幕范围时,点击输入,输入法会遮盖住表单框,而且无法向上滑动. 经过测试发现,是由于config.xml中设置了 FullScreen 的全 ...
- [SublimeText] 安装包管理
由于各种访问原因,因此记录一下给自己使用,原文地址如下: http://www.bonusbits.com/wiki/HowTo:Setup_Package_Control_for_Sublime_T ...
- asp .Net TreeView实现数据绑定和事件响应
最近做了一个图书馆管理系统,其中要实现中图法分类号查询,因为初学asp ,感觉还有点难度, 第一步:数据库文件 第二步 向界面中拖进TreeView控件 第三步添加事件 下面是cs文件代码 //Tre ...
- TCP/IP协议与UDP协议的区别
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, ...
- cocos2d-x quick 学习 二 Hello world
总算找到问题了. 这几天一直在招问题没有找到原因. 为什么按照文档就不能建立新的项目. 不能建立自己的 hello world 我之前下载的源码文件 quick-cocos2d-x-2.2.5 ...
- 将windows server 2016改造为像windows 10一样适合个人使用的系统
Windows server 2016 RTM已流出,具体可以搜索wzor大神泄露的,英文版本是0911的.现根据我安装后整理的如何配置使个人更适合使用. 20170102更新:wzor泄漏的0911 ...
- jQuery 增加 删除 修改select option .
jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...
- Linux定时任务Crontab学习笔记
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond ...
- html(一)
一丶网页的主体结构 <html><head> <title>标题</title> //浏览器的标题</head><body> ...
- laravel框架总结(十二) -- 关联关系
这里我们users表对应的模型类名是users,大家特意注意下和user取名的不同 1.一对一关系 1>表A和表B的记录一一对应,比如一个用户对应一个社交账号 数据表的设计如下: 2> ...