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. Android Selector 与 Shape 基本用法

    分类: Android2011-07-19 11:07 7513人阅读 评论(4) 收藏 举报 androidencodingbutton测试c 1:Selector drawable的item中可以 ...

  2. [NOI2009]二叉查找树

    题目大意: 给定一棵严格的treap,父亲节点的优先级必然小于儿子节点的.权值按照二叉树的定义,左儿子小于父亲小于右儿子. 深度从1开始定义,每个点除优先级.数值之外,还有一个访问频度. 访问频度所产 ...

  3. 洛谷P2619 Tree I

    经典的k条白边MST 带权二分,按照套路我们要选择尽量少的白边. #include <cstdio> #include <algorithm> ; int D; struct ...

  4. [luogu2822][组合数问题]

    题目链接 题解: 对于上面和下面的式子进行分解质因数,然后看看上面的质因数个数减去下面的质因数个数能不能达到k的质因数的要求即可. 分解质因数的时候用对于阶乘分解质因数的常用方法:比如要求1999!中 ...

  5. typescript基础类型(学习笔记非干货)

    布尔值 Boolean let isDone:boolean=false; 数字 Number let decLiteral:number=6; let hexLiteral:number=0xf00 ...

  6. SpaceNet 数据集

    SpaceNet 数据集 SpaceNet是DigitalGlobe商业卫星公司提供的遥感图像集合,包含一些标记信息可用作机器学习研究. SpaceNet Challenge主页: https://s ...

  7. SQL经典问题:找出连续日期及连续的天数

    create table tmptable(rq datetime) go insert tmptable values('2010.1.1') insert tmptable values('201 ...

  8. 自己的Promise

    废话不多说,直接上代码: class Promise2{ constructor(fn){ const _this=this; //重点 this.__queue=[]; this.__succ_re ...

  9. .Net MVC 当前上下文中不存在名称“Style”

    遇到了这种问题,最后居然是我拼写错误了... 当然也有其他原因 http://blog.csdn.net/bianchao1/article/details/69666347 按照上面这篇博客的方法先 ...

  10. spring @Entity @Table

    import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; impor ...