1:集合

Collection(单列集合)

List(有序,可重复)

ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高

Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低

LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高

Set(无序,唯一)

HashSet 底层数据结构是哈希表 哈希表依赖两个方法:hashCode()和equals()

执行顺序:

首先判断hashCode()值是否相同

是:继续执行equals(),看其返回值 是true:说明元素重复,不添加;是false:就直接添加到集合

否:就直接添加到集合

最终:自动生成hashCode()和equals()即可

LinkedHashSet 底层数据结构由链表和哈希表组成,由链表保证元素有序,由哈希表保证元素唯一。

TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树)

如何保证元素唯一性呢?根据比较的返回值是否是0来决定

如何保证元素的排序呢?

自然排序(元素具备比较性) 让元素所属的类实现Comparable接口

比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象

Map(双列集合)

Map集合的数据结构仅仅针对键有效,与值无关。存储的是键值对形式的元素,键唯一,值可重复。

HashMap

底层数据结构是哈希表。线程不安全,效率高,哈希表依赖两个方法:hashCode()和equals()

执行顺序:

首先判断hashCode()值是否相同

是:继续执行equals(),看其返回值,是true:说明元素重复,不添加,是false:就直接添加到集合

否:就直接添加到集合

最终:自动生成hashCode()和equals()即可

LinkedHashMap 底层数据结构由链表和哈希表组成,由链表保证元素有序。由哈希表保证元素唯一。

Hashtable

底层数据结构是哈希表。线程安全,效率低,哈希表依赖两个方法:hashCode()和equals()

执行顺序:

首先判断hashCode()值是否相同

是:继续执行equals(),看其返回值,是true:说明元素重复,不添加,是false:就直接添加到集合

否:就直接添加到集合

最终:自动生成hashCode()和equals()即可

TreeMap

底层数据结构是红黑树。(是一种自平衡的二叉树)

如何保证元素唯一性呢? 根据比较的返回值是否是0来决定

如何保证元素的排序呢?

自然排序(元素具备比较性):让元素所属的类实现Comparable接口

比较器排序(集合具备比较性):让集合接收一个Comparator的实现类对象

2.关于集合选取原则

是否是键值对象形式:

是:Map

键是否需要排序:

是:TreeMap

否:HashMap

不知道,就使用HashMap。

否:Collection

元素是否唯一:

是:Set

元素是否需要排序:

是:TreeSet

否:HashSet

不知道,就使用HashSet

否:List

要安全吗:

是:Vector

否:ArrayList或者LinkedList

增删多:LinkedList

查询多:ArrayList

不知道,就使用ArrayList

不知道,就使用ArrayList

3:集合的常见方法及遍历方式

Collection:

add()

remove()

contains()

iterator()

size()

遍历:

增强for

迭代器

|--List

get()

遍历:

普通for

|--Set

Map:

put()

remove()

containskey(),containsValue()

keySet()

get()

value()

entrySet()

size()

遍历:

根据键找值

根据键值对对象分别找键和值

java中集合的组成及特点的更多相关文章

  1. Java中集合List,Map和Set的区别

    Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...

  2. java中集合Collection转list对象

    参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...

  3. JAVA中集合转数组遍历

    JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) {     ...

  4. Java中集合List,Map和Set的差别

    Java中集合List,Map和Set的差别 1.List和Set的父接口是Collection.而Map不是 2.List中的元素是有序的,能够反复的 3.Map是Key-Value映射关系,且Ke ...

  5. Java中集合的概述

    一.集合和数组的区别 1.数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 2.集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数 ...

  6. Scala中集合类型与java中集合类型转换

    对于java中的集合元素并不能在scala中拿来就用的,需要进行相应的转换. 1. 转换规则如下 从下面可以看出,有些可以相互转换的,有些只能单向转换: scala.collection.Iterab ...

  7. Java中集合关键字的区别

    1. ArrayList.Vector和Stack有什么区别? 1.ArrayList的方法和实现基本上和Vector一样,底层都是数组的实现(简:API基本一样) ​   2.Stack继承了Vec ...

  8. Java中集合概念

    集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行储存,而想要储存多个对象,就不能是一个基本的变量,而应该是一个 ...

  9. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...

  10. java中集合的扩容

    对于Java中的各种集合类,根据底层的具体实现,小结了一下大致有3种扩容的方式: 1.对于以散列表为底层数据结构实现的,(譬如hashset,hashmap,hashtable等),扩容方式为当链表数 ...

随机推荐

  1. Angularjs中的$q详解

    先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...

  2. 为项目添加CUDA支持

    最近研究体绘制方面的东西,需要用到CUDA加速.从官网下载了CUDA 7.0(支持VS2013)装好后,VS2013中能直接创建CUDA项目,也可以在原有项目中添加cu文件. 进入正题,为已有项目添加 ...

  3. (HDU 1542) Atlantis 矩形面积并——扫描线

    n个矩形,可以重叠,求面积并. n<=100: 暴力模拟扫描线.模拟赛大水题.(n^2) 甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形. 甚至这个题就可以这么做. n<=1 ...

  4. json.stringify和json.parse,序列化和反序列化

    json.stringify()是序列化函数,用于将对象转化为字符串:json.parse()是反序列化函数,用于将字符串转化为json对象 一.序列化: var o={name:'wen',age: ...

  5. 化工pdf下载

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  6. php 配置文件不加载的一次配置

    最近在一台服务器上安装配置了5.6和7.1两个版本的php,之前是5.6的.使用都正常,7.1是后期安装的. 问题: 在7.1的程序目录中命名的配置文件为:php7-9026.ini,同时安装并在配置 ...

  7. JavaSE学习总结(十八)—— 多线程

    多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系 ...

  8. Windows服务BAT命令-安装、卸载、启动、停止

    1.安装服务 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\WiseMES\MES.WindowsService ...

  9. VirtualBox设置共享文件夹

    前提是已经正确安装增强工具,在安装增强工具时,没有faile的,全部done 1.添加共享文件夹(已经在lmg下创建过目录 /mnt/bdshare ) sudo mount -t vboxsf Ba ...

  10. POJ - 3122 Pie(二分)

    http://poj.org/problem?id=3122 题意 主人过生日,m个人来庆生,有n块派,m+1个人(还有主人自己)分,问每个人分到的最大体积的派是多大,PS每 个人所分的派必须是在同一 ...