菜鸟教程

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常见集合类的更多相关文章

  1. Java 常见异常及处理方案

    Java 常见异常处理方案 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error: ...

  2. java基础 集合类

    java集合类主要有以下集中: List结构的集合类: ArrayList类, LinkedList类, Vector类, Stack类 Map结构的集合类: HashMap类,Hashtable类 ...

  3. Java常见的几种内存溢出及解决方法

    Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...

  4. Java的集合类

    转自:Q.Mr的博客 http://www.cnblogs.com/zrtqsk/p/3472258.html (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教 ...

  5. Java常见Exception物种

    Java常见Exception物种 1.ClassNotFoundException 2.IOException 3.NoSuchFieldException 4.NoSuchMethodExcept ...

  6. java常见文件操作

    收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...

  7. java常见字符串的操作

    /** * java常见字符串的操作 */ public class Test7 { public static void main(String args[]){ StringBuffer sBuf ...

  8. Java常见开发规范

    1 背景概述 作为程序员大军中的一员,笔者工作于沈阳数通畅联软件技术有限公司.在任职工作的第一天就听领导强调开发规范的重要性,但是笔者心里还想为什么开发规范是最重要的,难道是不应该是实现功能就万事大吉 ...

  9. 首先java中集合类主要有两大分支

    本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重 ...

随机推荐

  1. 微信小程序实现图片上传,预览,删除

    wxml: <view class='imgBox'> <image class='imgList' wx:for="{{imgs}}" wx:for-item= ...

  2. 关于JqueryEasyUI插件—Tab,默认选中某个面板 如果不明显指定的话,第一个就是被选中的

    如果不明显指定的话,第一个就是被选中的,你可以通过data-options="selected:true"指定默认选中

  3. 修改VNCSERVER 默认的分辨率的方法

    vi /usr/bin/vncserver /1024 找到默认的1024*768修改为 :1680*1050 reboot 重启

  4. 并发容器ConcurrentHashMap与synchronized联合使用达到线程安全

    http://blog.csdn.net/yansong_8686/article/details/50664338 map.put(KEY, map.get(KEY) + 1); 实际上并不是原子操 ...

  5. 深入解析当下大热的前后端分离组件django-rest_framework系列三

    三剑客之认证.权限与频率组件 认证组件 局部视图认证 在app01.service.auth.py: class Authentication(BaseAuthentication): def aut ...

  6. Longest Substring Without Repeating Characters——经典题

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  7. 理解JWT(Json Web Token)

    这篇文章写得不错: 理解JWT(JSON Web Token)认证及python实践,这里不做转载,仅摘要如下,有删改,仅做个人学习,感谢原作者. 常用认证机制: 1)HTTP basic Auth: ...

  8. jstree无限级菜单ajax按需动态加载子节点

    业余时间研究了一下jstree,更新非常快已经是3.0了,首先看一下效果截图: 1.页面引入样式和脚本(注意路径根据实际情况) <link href="~/Scripts/vakata ...

  9. vue-music 关于playlist (底部播放列表组件)

    建立playlist.vue 组件,在player.vue 组件中引用,点击迷你播放器的播放列表按钮由下至上弹出这个层,所以在player.vue 播放器组件中引用 在playlist.vue 组件中 ...

  10. Java工具类-加密算法

    import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.securit ...