JAVA常见集合类
菜鸟教程
http://www.runoob.com/java/java-collections.html
TreesSet原理:
https://blog.csdn.net/wangyunpeng0319/article/details/78297445
极客学院常见框架原理分析:
http://wiki.jikexueyuan.com/project/java-collection/linkedhashset.html
Collection是最基本的集合接口,java不提供collection的直接实现类,除map集合外所有集合必须实现Collection接口的子接口,如set接口和list接口。
Set
Set是collection接口下的子接口,特征是set集合中的元素是不能重复的,提供的常见实现类HashSet,TreeSet,LinkedHashSet:
HashSet 底层根据元素的HashCode存放和检索数据,因此不允许重复,可以存放null值,但是也只能存放一个,hashset存放和抓取数据都是随机的因此并不能保证数据存放和检出的顺序是一致的。
LinkedHashSet 具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
TreeSet 属于集的范围,所以它只能存放引用类型,不能用于基本数据类型,实现了set接口,所以它本身不能有重复的元素,当存入自定义的引用类型的时候就必须考虑到元素不可重复的这个特性,换句话说就必须实现Comparable接口,因为在其内部会调用Comparable接口的compareTo方法来比较两个元素的大小,然后根据红黑树进行排序,这就是自然排序。也就是说TreeSet集合中存放的元素都应该是相同类型元素。除了自然排序,TreeSet也可以进行定制排序,TreeSet的自然排序是根据集合元素的大小,TreeSet将他们以升序排列。如果需要实现定制排序,例如降序,则可以使用Comparator接口。该接口里包含一个int compare(T o1, T o2)方法,该方法用于比较o1和o2的大小。 如果需要实现定制排序,则需要在创建TreeSet集合对象时,并提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。
HashSet,TreeSet,LinkedHashSet之间的区别:HashSet只去重,TreeSet去重并排序,LinkedHashSet去重并保留插入顺序
|
HashSet |
不能保证有序 |
按照hash值存放 |
都不允许重复的元素 |
|
TreeSet |
有序的 |
按照默认规则排序,也可以自定义 |
List
也是collection接口下的子接口,可以存放重复数据,是按照元素下标的方式存放数据,因此可以直接使用下标来存取数据例如list.get(i)的方式;
Arraylist内部使用动态数组的实现原理,因此使用其默认构造方法创建的长度是10,如果内部容量不够时会自动扩充0.5倍,即当前容量*1.5,也因此arraylist在对数据进行插入和删除时的效率是非常低下的。同时arraylist的是非同步是,即线程是不安全的。
Linkendlist允许插入null值。内部使用双链表的模式对数据进行存储,因此不用考虑容量问题,Linkendlist相比arraylist它的插入和删除的效率是相对高的,但是在对数据进行查询和修改这种需要定位的操作的时候则显的无力,因为它需要拨动指针。Linkendlist没有同步方法,如果涉及多线程访问问题,就必须自己实现访问的同步,解决的方法就是在创建的时候构造一个同步的list,如:
Listlist=Collections.synchronizedList(newLinkedList(...));
JAVA常见集合类的更多相关文章
- Java 常见异常及处理方案
Java 常见异常处理方案 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error: ...
- java基础 集合类
java集合类主要有以下集中: List结构的集合类: ArrayList类, LinkedList类, Vector类, Stack类 Map结构的集合类: HashMap类,Hashtable类 ...
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- Java的集合类
转自:Q.Mr的博客 http://www.cnblogs.com/zrtqsk/p/3472258.html (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教 ...
- Java常见Exception物种
Java常见Exception物种 1.ClassNotFoundException 2.IOException 3.NoSuchFieldException 4.NoSuchMethodExcept ...
- java常见文件操作
收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...
- java常见字符串的操作
/** * java常见字符串的操作 */ public class Test7 { public static void main(String args[]){ StringBuffer sBuf ...
- Java常见开发规范
1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司.在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉 ...
- 首先java中集合类主要有两大分支
本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重 ...
随机推荐
- 【hihocoder】sam-3
把Parent Tree拓扑排序下,然后从下往上合并. 具体的看官方题解啦~ #include<bits/stdc++.h> #define N 1000010 using namespa ...
- linux 系统调用exec()
系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其参数包括文件名(filename).参数列表(argv)以及环境变量(envp).exec函数族当然不止一个,但它们大致相同,在 ...
- 在 static table view 中增加date picker 并进行动态高度设定
http://blog.apoorvmote.com/how-to-pop-up-datepicker-inside-static-cells/
- zookeeper安装和搭建集群方式(window)
1. 概述 ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护.名字服务.分布式同步.组服务等.ZooKeeper的目标就是封装好复杂 ...
- DateTimeToUnix/UnixToDateTime 对接时间转换
问题,通过毫秒数来解析出时间:(很多对接的时候经常需要用到) <?php $MyJson = '{"jingdong_vas_subscribe_get_responce": ...
- python基础(1)---python简介
一.python简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.目前Python已经成为实际上除了中国最流行的开发语 ...
- redis之(五)redis的散列类型的命令
[一]赋值与取值 -->命令:HSET key field value -->往某个key的某个属性设置值 -->命令:HGET key field --> 获取某个k ...
- poj 2593&&poj2479(最大两子段和)
Max Sequence Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16850 Accepted: 7054 Des ...
- ibatis中的符号#跟$区别
昨天一个项目中在写ibatis中的sql语句时,order by #field#, 运行时总是报错,后来上网查了查,才知道这里不该用#,而应该用$,随即查了下#与$的区别. 总结如下: 1.#是把 ...
- 【JBPM4】创建流程实例
示例代码: ProcessEngine processEngine = Configuration.getProcessEngine(); ExecutionService executionServ ...