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中的集合类包含的内容很多而且很重 ...
随机推荐
- python安装基础
. python安装 //先查看是否存在python的包,如果没有,那可以用yum或去python的官网安装 [root@localhost ~]# rpm -qa|grep python pytho ...
- 【转载】python 特殊函数 dunder function
python的特殊方法:另外一种称谓是 dunder function, 就是 under-under function的简写,就是指那些前后都带双下划线的函数. 转自这里: https://blog ...
- Android Studio2.3相关文章
安卓之旅第一站--第一次Android Studio2.3搭建过程总结 http://blog.csdn.net/iam549032340/article/details/56838907 Andro ...
- gitlab备份与恢复
(1)备份 1.创建备份目录,并授权 mkdir /data/backups/gitlab -pv chown -R git.git /data 2.修改gitlab配置 vim /etc/gitla ...
- hdu 4135 Co-prime (素数打表+容斥原理)
题目链接 题意:问从A到B中与N互素的个数. 题解: 利用容斥原理:先求出与n互为素数的个数. 可以先将 n 进行素因子分解,然后用区间 x 除以 素因子,就得到了与 n 的 约数是那个素因子的个数, ...
- POJ 1845 Sumdiv (整数唯一分解定理)
题目链接 Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25841 Accepted: 6382 Desc ...
- apache 把404页面的url转发给php脚本处理
# .htaccess1 RewriteCond %{REQUEST_FILENAME} !-f 2 RewriteRule ^(.*)$ map.php?host=%{HTTP_HOST}& ...
- (1)go 环境搭建
1 .下载安装 https://golang.org/ 2.环境变量配置 安装后会自动配置三个环境变量 (1) GOROOT: (2) PATH: (3) GOPATH GOPATH 从1.8开始,w ...
- CF1020B Badge 【模拟链表】
n个点(n<=1000) 接下来n个整数表示ai 第i个数ai表示i到ai有一条边 输出: n个数 表示从第i个点出发,最先被访问两次的点 样例1: 从1 出发,先到达2,2会到达3,3又到达2 ...
- 阿里云轻量级学生机搭建FTP最新教程
碰了几次壁,我整理一下分析自己在阿里云上成功安装FTP的教程. 1.使用root用户进入云服务器. 2.rpm -qa|grep vsftpd 查看是否安装了ftp,一般阿里云服务器你以前没安装过, ...