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,第二个是底层是 ...
随机推荐
- 在 Windows 10 中启用 Windows Photo Viewer
本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4727323.html 不知大家在使用了Win10之后有没有这样感受 ...
- Java throws子句是怎么写的呢?
如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常.做到这点你可以在方法声明中包含一个throws子句.一个 throws 子句列举了一个方法可能抛 ...
- 【转】PowerShell 连接SQL Server 数据库 - ADO.NET
转至:http://www.pstips.net/connect-sql-database.html PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整 ...
- AC6102 开发板千兆以太网UDP传输实验2
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- href="javascript:function()" 和onclick的区别
href='javascript:function()'和onclick能起到同样的效果,一般来说,如果要调用脚本还是在onclick事件里面写代码,而不推荐在href='javascript:fun ...
- JAVA NIO——Buffer和FileChannel
Java NIO和IO的主要区别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 示例: import java.io.FileInputStream; import java.io ...
- Django基础
一.路由系统 1.静态路由 from app01 import views urlpatterns = [ #url(r'^admin/', admin.site.urls), url(r'^home ...
- YUV格式分析
转自:http://www.cnblogs.com/armlinux/archive/2012/02/15/2396763.html Andrew Huang <bluedrum@163.com ...
- C语言-自定义函数
C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...
- p12(PKCS12)和jks互相转换
p12 -> jks keytool -importkeystore -srckeystore keystore.p12 -srcstoretype PKCS12 -deststoretype ...