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

  • 这种数据结构称为集合 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. SYN591-B型 转速表

       SYN591-B型 转速表 光电转速表数显转速表智能转速表使用说明视频链接: http://www.syn029.com/h-pd-249-0_310_44_-1.html 请将此链接复制到浏览 ...

  2. lock和synchronized如何选择?

    1.lock是一个接口,而synchronized是java关键字,synchronized是内置的语言实现. 2.synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁,而l ...

  3. 错误处理之try、catch、finally中的return、throw执行顺序。

    今天遇到一个让人无语的代码块 try { bilSheetService.syncUser(bilWebseviceLog, userId, optType); }catch (Exception e ...

  4. spring boot 2.x 系列 —— spring boot 整合 redis

    文章目录 一.说明 1.1 项目结构 1.2 项目主要依赖 二.整合 Redis 2.1 在application.yml 中配置redis数据源 2.2 封装redis基本操作 2.3 redisT ...

  5. Jenkins+Python+GitLab持续集成

    创建任务 登录Jenkins,点击左侧列表的新建选项.输入任务名称,选择构建一个自由风格的软件项目,点击确定. 配置 在任务配置界面,可以设置General标签中的丢弃旧的构建选项,设置保持构建的天数 ...

  6. python统计字符串里每个字符的次数

    方法一: 推导式 dd="ewq4aewtaSDDSFDTFDSWQrtewtyufashas" print {i:dd.count(i) for i in dd} 方法二: co ...

  7. 在django中使用vue.js需要注意的地方

    有接口如下: http://127.0.0.1:8000/info/schemes/ 返回json数据: [ { "name": "(山上双人标准间)黄山经典二日游(魅力 ...

  8. java Https工具类

    import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import ja ...

  9. Python入门(一) 异常处理

    异常处理 捕捉异常可以使用try/except语句. try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理. 以下是语法: try: <语句> # ...

  10. ZOJ 3955:Saddle Point(思维)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3955 题意:给出一个n*m的矩阵,定义矩阵中的特殊点Aij当且仅当Aij是 ...