各种集合类的特性简介

  • 集合类概述
  • 集合中存储什么
  • 不同集合对应不同数据结构
  • 集合继承结构及特性简介
  • Map集合继承结构及特性简介
  • 总结:

集合类概述

什么是集合?有什么用?
数组其实就是一个集合,集合实际上一个容器,可以来容纳其他类型的数据。
集合为什么说在开发中使用的比较多?
集合是一个容器,是一个载体,可以一次容纳多个对象(如超市的购物袋)
在实际开发中,假设连接数据库,数据库中有10条记录
那么假设把这10条记录查询出来,在java程序中将会有10条数据封装成10个对象,然后将10个java对象放到某一个集合中,将集合传到前端,然后遍历集合,将一个数据一个数据

集合中存储什么

集合不能直接存储基本数据类型,另外集合也不能直接存储java对象
集合当中存储的都是java的内存地址。(或者集合中存储的是引用)

list.add(100);           //自动装箱Integer

注意:
  集合在java中本身是一个容器,是一个对象
  集合中任何时候存储的都是引用

集合里面也可以存集合

不同集合对应不同数据结构

在java中每一个不同的集合,底层会对应不同的数据结构,往不同的集合中存储元素,等于将数据放到了不同的数据结构中。什么是数据结构?数据存储的结构就是数据结构,不同的数据结构,数据存储方式不同,例如:
数组、二叉树、链表、哈希表
以上都是常见的数据结构。
往集合c1中放数据,可能放到数组上。
往集合c2中放数据,可能放到二叉树了
使用不同的集合等同于使用了不同的数据结构。
在java集合这一章节,你需要掌握的不是精通数据结构,java中已经将数据结构实现了,已经写好了这些常用集合类,只需要掌握怎么用?在什么情况下选择哪一种合适的集合去使用即可。
ArrayList底层使用数组
LinkedList底层使用链表
HashMap底层哈希表
TreeSet底层二叉树结构

new ArrayList(); //创建一个集合,底层是数组
new LinkedList(); //创建一个集合,底层是链表。

集合继承结构及特性简介

集合在java JDK中在哪个包下?
  java.util.*;

所有的集合类和集合接口都在java.util包下
为了能够掌握集合这块的内容,最好能够将集合的继承结构背会
集合整个这个体系是怎样的一个结构,需要有印象。
在java中集合分为两大类
一类是以单个方式存储元素:

  这一类集合超级父接口:java.util.Collection
一类是以键值对方式存储元素

  这一类结合超级父接口:java.util.Map

Iterable有.iterator()方法,可以获得迭代器对象,从而遍历集合
  Iterator it=“collection对象”.iterator();
  it是迭代器对象

所有集合都继承Iterator的含义是,所有集合都是可迭代(遍历)的。

图片可能比较模糊,但是没关系
Iterable接口:(最上面一层)
最上面的是Iterable接口。Iterator接口是可迭代的,可遍历的。所有集合元素都是可迭代的,可遍历的。是Collection接口的父类。
Iterator接口:(最左边的一个):
集合的迭代器对象。与Collection接口是关联关系
Collection接口:
集合接口的公共父类。
List接口:
list集合存储元素特点,有序可重复,存储的元素有下标:有序实际上是指存进去是这个顺序,取出来还是这个顺序,这里的顺序不是说按照大小顺序排序。
有序是因为list集合都有下标,下标从0开始,以1递增。
Set接口:
set集合存储元素特点:无序不可重复,无序表示存进去是这个顺序,取出来就不一定是这个顺序了,另外Set集合中元素没有下标,set集合中的元素还不能重复。
List接口实现类:
  ArrayList实现类
  ArrayList集合底层采用了数组这种数据结构,ArrayList是非线程安全的。
  1.ArrayList集合初始化容量是10
  2.ArrayList集合底层是Object类型的数组Object[]
  3.扩容到原容量的1.5倍。
  4.建议给定一个预估计的初始化容量,减少数组的扩容次数,这是ArrayList集合比较重要的优化策略。
  5.数组的优点:检索效率比较高。
  6.数组的缺点:随机增删元素效率比较低。
  LinkedList实现类
  LinkedList集合底层采用了双向链表数据结构
  1.LinkedList集合是双向链表
  2.对于链表数据结构来说,随机增删效率高,检索效率比较低。
  3.链表中的元素在空间存储上,内存地址不连续。
  Vector实现类
  Vector集合底层采用了数组这种数据结构, Vector是非线程安全的,vector所有方法加了sychronize关键字修饰,但是效率较低,现在保证线程安全有别的方案,所以Vector使用的比较少了。
Set接口实现类:
  HashSet实现类
  实际上hashSet底层在new的时候,底层实际上new了一个hashMap的集合,向HashMap集合中存储元素,实际上是存储到hashMap集合中了。hashMap是一个hash表存储结构。
  HashSet集合初始化容量为16,初始化容量建议是2的倍数,扩容:扩容之后是原容量的2倍。
  SortedSet实现类
  SortedSet由于继承了Set集合,所以它的特点也是无序不可重复,但是放在SortedSet集合中的元素可以自动排序。我们称为可排序集合,放到该集合中的元素自动按照大小顺序排序的。
  TreeSet实现类(直接继承自Sorted实现类)
  TreeSet底层在new的时候,底层实际上new了一个TreeMap的集合,TreeSet集合在放数据的时候,实际上是将数据放到TreeMap中了。(具体查看treeset的构造方法)
  TreeMap集合底层采用了二叉树的数据结构。

Map集合继承结构及特性简介

Map接口:
1.Map集合和collection集合没有关系
2.Map集合以key和value的键值对方式来存储元素
3.key和value都是存储java对象的内存地址。
4.所有Map集合的key特点:无序不可重复
5.Map集合的key和set集合存储元素特点相同。
HashMap实现类:
HashMap底层是哈希表数据结构,是非线程安全的。
在JDK8之后,如果哈希表单向链表中元素超过8个,单向链表这种数据结构会变成红黑树数据结构。当红黑树上的节点数量少于6时,会重新把红黑树变成单向链表数据结构。这种方式也是为了提高检索效率,二叉树的检索会再次缩小扫描范围。提高效率。初始化容量16,默认加载因子0.75.
扩容是:扩容之后的容量是原容量的2倍。

Hashtable实现类
HashTable底层也是哈希表数据结构,是线程安全的,其中所有的方法都带有sychronized关键字,效率较低,现在使用较少。
hashtable的key和value不允许为null
hashtabe集合初始化容量11
hashtable集合扩容是:原容量*2+1
Properties实现类(直接继承自Hashtable)
Properties是线程安全的,因为继承HashTable,Properties存储元素的时候,也是key和value方式存储,它只支持String类型,不支持其他类型。Properties被称为属性类。
SortedMap实现类
SortedMap也是一个接口,它实现了Map,SortedMap集合的key存储元素的特点:首先是无序不可重复的,另外放在SortedMap集合key部分的元素会自动按照大小顺序排序,称为可排序的集合。
TreeMap实现类(直接继承自SortedMap)
TreeMap实现了SortedMap,它是一个实现类。TreeMap集合底层的数据结构是一个二叉树

总结:

ArrayList:底层是数组
LinkedList:底层是双向链表
Vector:底层是数组,线程安全的,效率较低,使用较少
HashSet:底层是HashMap,放到HashSet集合中的元素等同于放到HashMap集合key部分了
TreeSet:底层是TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合中的key部分了
HashMap:底层是哈希表数据结构
Hashtable:底层也是哈希表,线程安全,效率
Properties
TreeMap:底层是二叉树,TreeMap集合的key可以自动按照大小顺序排序。

List集合存储元素的特点
有序可重复

Set集合元素的特点
无序不可重复

Sorted
首先是无序不可重复的,但是Sorted集合中的元素是可排序的(大小顺序)

Map集合的key就是一个Set集合
在Set集合中放入数据,实际上放到了Map集合的key部分(具体查看源代码set的put方法)

Java基础-各种集合类的特性简介相关推荐

  1. Java基础之Java8 新特性

    hp实训8.19_Java基础之Java8新特性 // 信息展示方法 ,接口中,就可以提供一种实现. 就可以使用这种功能.default void print() {System.out.printl ...

  2. Java基础语法96-Java91011新特性

    Java基础语法96-Java9&10&11新特性 一.java9新特性 一. JDK 和 JRE 目录结构的改变 bin 目录 包含命令行开发和调试工具,如javac,jar和jav ...

  3. java基础之集合类

    一.Java集合类是什么?java集合类型主要有哪些? 首先看一张概念图,这里囊括了集合类的大部分关系及内容 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中 ...

  4. java 10新_【Java基础】Java10 新特性

    Java10 新特性 局部变量类型推断 局部变量的显示类型声明,常常被认为是不必须的. 场景一:类实例化时.在声明一个变量时,总是习惯了敲打两次变量类型,第一次用于声明变量类型,第二次用于构造器. 场 ...

  5. Java基础核心之三大特性

    三大特性 一.三大特性 面向对象三大特性:封装.继承.多态. 封装: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 继承: 子类拥有父类的所 ...

  6. Java基础知识——集合类

    工具类:Collection和Map,两者是同一级别的 知识点: expectedModCount ArrayList:懒加载,transient,System.arraycopy() LinkedL ...

  7. 【JAVA基础】java基础之-java8新特性

    写在前面的话 脑子是个好东西,可惜的是一直没有搞懂脑子的内存删除机制是什么,所以啊,入行多年,零零散散的文章看了无数,却总是学习了很多也忘了很多. 痛定思痛的我决定从今天开始系统的梳理下知识架构,记录 ...

  8. 【Java基础】Java7新特性—Files类,Path类,Paths类的用法

    文章目录 Java7新增文件IO类 一.Paths 1.创建Paths 二.Path 1.创建Path 1.1.创建Path的三种方式 2.Path常用方法 三.Files 1.判断方法: 2.删除方 ...

  9. Java修仙,法力无边(光速回顾Java基础~)

    Java修仙,法力无边(光速回顾Java基础~)✿✿ヽ(°▽°)ノ✿ 目录 第一重 炼体(Java基础编程) 1.1 Java基础概述 1.2 JDK简介 1.3 Java程序的开发 1.4 Java ...

最新文章

  1. Windows和Linux的编译理解
  2. 跨终端响应式页面设计入门
  3. Codeforces Round #617 (Div. 3) F. Berland Beauty 思维
  4. linux arm mmu基础【转】
  5. postifx网络服务的搭建和配置
  6. 常用的ajax的代码
  7. TSX指令集中的 RTM 受限的事务内存 来实现并发无锁编程
  8. 一文读懂DeFi衍生品市场六大方向及底层发展逻辑 |链捕手
  9. 美国大大学计算机排名2015,2015年美国计算机专业大学排名TOP20
  10. 使用7段数码管实现0到99数码管显示(循环嵌套)
  11. 资深项目经理2019年总结
  12. 晶联讯12864液晶+STM32+HAL库 IO模拟SPI成功实现显示。
  13. Kali Linux 安装搜狗拼音输入法
  14. Instruments使用技巧
  15. 从AI、5G谈到理智追星,互联网大会首日还有哪些神仙言论?
  16. solidity第一课—了解Remix和Hellosolidity三行代码
  17. 计算机网络-因特网的组成
  18. 详细介绍OAuth2.0及实现和SpringSecurity的整合应用
  19. Java Virtual Machines Memory Explained
  20. 配电自动化终端dtu

热门文章

  1. javascript 语法
  2. lightoj 1023
  3. Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)
  4. 飞信免费消息api,飞信接口
  5. Nacos在spring boot的使用
  6. c语言实现两个大数相乘
  7. python做个后端系统_Python做后端开发的优势
  8. plsql报ora-00911错误的解决
  9. oracle dg切换步骤,详解Oracle dg 三种模式切换
  10. 如何用脚本创建一个加密文件夹