• 集合:又被称为容器,用来存储数据,他是一个对象,能够将具有相同性质的多个元素汇聚成一个整体,集合被用于存储,获取,操纵和传输聚合的数据。

  • 这种数据结构称为集合 Collenction:他是集合的根接口,定义了所有集合的相关功能方法。

  • 数组和集合的区别:

  • 数组

    集合

    存数据

    存数据

    存同一种数据类型的数据

    存任意数据类型

    数组中没有方法

    集合中提供了很多方法供我们操作

    存储基本数据类型和引用数据类型String

    存储引用数据类型(对象)

    • ArrayList:是接口List的常用实现类,ArrayList的底层是以数组实现的,且数组容量可变(初始容量是10,存多于10个就要扩容,底层就要创建新的数组),ArrayList可以存储null值。

    • ArrayList是不同步的,即不保证线程安全的。

    • 扩容机制是按照1.5倍进行扩容的,选择初始容量的时候要进行斟酌。

    • ArrayList与List方法与Collention中的方法完全一致!存储都是有序的,且可以有重复

    • LinkedList

      • 底层使用链表实现,方法与ArrayList相同,允许存储null值,

      • LinkedList是不保证线程安全的。

      • Collention接口中的方法,ArrayList中的方法,LinkedList都可以使用。

      • ArrayList 和LinkedList的优缺点:

        ArrayList

        LinkedList

        底层以数组实现所以通过下标取值、赋值效率高,在内存上的地址是连续的

        底层是链表结构实现的,所以通过下标取值赋值效率低。在内存上是不联系的

        添加删除元素效率低

        添加删除元素效率高

      • LinkedList因为以链表实现的集合,操作开头和结尾方便,所以其提供了除List之外的常见方法外,还提供了专门操作开头和结尾元素的方法,例如 addFirst()和addLast()等方法。

    Set

    • Set是Collention的子接口

    • Set集合不包含重复元素

    • Set接口中的方法与Collention中的方法一模一样,set中的元素不允许有重复的值。添加成功返回true,不成功返回false。

    HashSet

    • 类 是Set 的实现类,不允许有重复元素,不保证迭代顺序(也就是无序的,也就是输出的结果跟插入的顺序不一致。),不保证线程安全。所以HashSet的方法与Collention方法一致,允许null值。

    HashCode:利用HashSet存储自动以对象,使去除重复,就是想要保证自定义对象去重

    → 在自定义类中重写equals和HashCode方法即可,当HashCode相同的时候才会去执行equals,如果HashCode直接不同了,那么equals将不用再执行了。

  • TreeSet

    • TreeSet是Set的常见的子实现类,只要是Set的子类都不能存储相同元素)(也就是不允许元素重复),并且Set下的实现类都不能通过下标操作

    • TreeSet是对元素进行自然顺序(默认升序)排序,或者根据创建set的时候提供Comparator进行排序。

    • TreeSet是不保证线程安全的。

    • 基于TreeMap实现,使用元素的自然顺序对元素进行排序。且树是没有容量的。

    • 从写自定义对象时,该对象的类需要实现Comparable接口,重写其ComparTo方法。

    • 例如存储学生对象,按年龄排序。

      • 重写ComparTo方法 ,return返回0只存第一个,返回负数和正数都能够排序,具体效果经过尝试。

      LinkedHashSetlinked 和 Hashset的结合体,能保证数据不重复并且有序(按照输入顺序排序),

Java集合Collention的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  3. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

  4. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  8. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  9. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

随机推荐

  1. kubernetes实战篇之nexus oss服务器部署及基于nexus的docker镜像仓库搭建

    系列目录 Nexus oss仓库管理平台搭建 Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各种仓库,说的通俗以下,就是私服镜 ...

  2. MYSQL的全局变量和会话变量

    系统变量又分为全局变量与会话变量. 全局变量在MYSQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改. 会话变量在每次建立一个新的连接的时候,由MYSQ ...

  3. PDF Expert for Mac v2.4.22 中文破解版下载 PDF阅读编辑软件

    PDF Expert for Mac v2.4.22 中文破解版下载:http://h5ip.cn/CsRN PDF Expert for Mac, iOS 上最好用的 PDF 编辑器之一,现在终于打 ...

  4. Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)

    简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...

  5. 《Spring Cloud》学习(一) 服务治理!

    前言:之前网上学习过Spring Cloud,对于工作上需要是足够了,总归对于一些方面一知半解,最近难得有些闲暇时间,有幸读了崔永超先生的<Spring Cloud 微服务实战>,一方面记 ...

  6. 【JDK基础】java基础的一些资料

    工具:https://blog.csdn.net/javazejian/article/details/72828483 类加载器:https://blog.csdn.net/X5fnncxzq4/a ...

  7. SpringBoot 缓存注解 与EhCache的使用

    在SpringBoot工程中配置EhCache缓存 1.在src/main/resources下新建ehcache.xml文件 eternal=true //缓存永久有效,false相反 maxEle ...

  8. 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点

    目录 JVM 内存划分与内存溢出异常 垃圾回收算法与收集器 虚拟机中的类加载机制 Java 内存模型与线程 虚拟机性能监控与故障处理工具 参考 带你全面了解高级 Java 面试中需要掌握的 JVM 知 ...

  9. JDK1.8之ConcurrentHashMap

    目录 简介 JDK1.7 JDK1.8 重要属性 Node类 ForwardingNode类 原子操作和Unsafe类 重要方法 初始化表操作(initTable) 插入键值对(put和putVal) ...

  10. flask高级编程 LocalStack 线程隔离

    转:https://www.cnblogs.com/wangmingtao/p/9372611.html   30.LocalStack作为线程隔离对象的意义 30.1 数据结构 限制了某些能力 30 ...