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

  • 这种数据结构称为集合 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. HTML续

    HTML class属性 定义和用法 class 属性规定元素的类名(classname). class 属性大多数时候用于指向样式表中的类(class).不过,也可以利用它通过 JavaScript ...

  2. spring之@value详解二(转载)

    1.1 前提 测试属性文件:advance_value_inject.properties server.name=server1,server2,server3 #spelDefault.value ...

  3. Android前沿技术

    一.热升级Tinker源码解析与手写二.热修复阿里百川Sophix内核原理三.App Instantgoogle8.0 类似热更新技术原理与实战四.强制更新1.银行应用非对称加密对称加密五.组件化框架 ...

  4. vue项目实现表格导出excel表格

    第一:安装依赖 npm install -S file-saver xlsx npm install -D script-loader 第二:在目录里新建excel文件夹 在excel文件夹里新建两个 ...

  5. Spring ——表达式语言 Spring Expression Language (转载)

    目录 SpEL简介与功能特性 一.为什么需要Spring表达式语言 二.SpEL表达式Hello World! 三.SpEL表达式 3.1.文字表达式 3.2.SPEL语言特性 3.2.1.属性 3. ...

  6. 逻辑、集合运算上的卷积一览(FMT、FWT,……)

    \oplus=\and,\or,\veebar 简介 对于逻辑\(\oplus\)的卷积,而且你不能N方豹草 \[ A_k=\sum_{i\oplus j=k} B_i\times C_k\\ \] ...

  7. sql语句一些简单的用法

  8. 微信支付重复回调,java微信支付回调问题

    这几天一直在研究微信支付回调这个问题,发现之前微信支付回调都是正常的也没怎么在意,今天在自己项目上测试的时候发现相同的代码在我这个项目上微信支付回调老是重复执行导致支付成功之后的回调逻辑一直在执行,很 ...

  9. flask模板语言 jinja2 以及render_template 深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  10. C# 中的Request对象的应用

    QueryString属性:例:页面1:<a href="页面2.aspx?uanme=王华&uage=18">提交</a>             ...