Java中常见数据结构:List与Map

Wesley13
• 阅读 675

1:集合 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 Set(无序,唯一) HashSet 底层数据结构是哈希表(实际上是一个HashMap实例)。 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()即可

            LinkedHashSet
                底层数据结构由链表和哈希表组成。
                由链表保证元素有序。
                由哈希表保证元素唯一。
        TreeSet
            底层数据结构是红黑树。(是一种自平衡的二叉树)
            如何保证元素唯一性呢?
                根据比较的返回值是否是0来决定
            如何保证元素的排序呢?
                两种方式
                    自然排序(元素具备比较性)
                        让元素所属的类实现Comparable接口
                    比较器排序(集合具备比较性)
                        让集合接收一个Comparator的实现类对象
Map(双列集合)
    A:Map集合的数据结构仅仅针对键有效,与值无关。
    B:存储的是键值对形式的元素,键唯一,值可重复。
    
    HashMap
        HashMap是Java 1.2引进的基于哈希表Map接口的一个非同步实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。
        此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
        底层数据结构是[数组+链表]组成的。线程不安全,效率高
            哈希表依赖两个方法:hashCode()和equals()
            执行顺序:
                首先判断hashCode()值是否相同
                    是:继续执行equals(),看其返回值
                        是true:说明元素重复,不添加
                        是false:就直接添加到集合
                    否:就直接添加到集合
            最终:
                自动生成hashCode()和equals()即可
        LinkedHashMap
            底层数据结构由双向循环链表和哈希表组成。
                由链表保证元素有序。
                由哈希表保证元素唯一。
    Hashtable
        Hashtable是基于陈旧的Dictionary类,完成了Map接口。线程安全,效率低
            哈希表依赖两个方法: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()
    
    遍历:
        根据键找值
        根据键值对对象分别找键和值
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Chase620 Chase620
3年前
ArrayList底层
一、ArrayList集合底层数据结构1.ArrayList集合介绍List集合的可调整大小数组实现。2.数组结构介绍增删快:每次增加删除元素,都需要更改数组长度、拷贝以及移除元素位置。查询快:由于数组在内存中是一块连续空间,因此可以根据地址索引的方式快速获
Wesley13 Wesley13
2年前
java 面试
1、ArrayList、Vector、LinkedList之间的区别?ArrayList:底层数组,查询快,增删慢,线程不安全,效率高Vector:底层数组,查询快(由于线程安全,其实查询也不快),增删慢,线程安全,效率低LinkedList:底层双重链表,查询慢,增删快,线程不安全,效率高。3、列举Co
Wesley13 Wesley13
2年前
java集合基础复习
温故知新,好一段学习时间过后到了收割的季节。java中集合java.util包下的一个集合根接口collection,其子接口list和set,map接口定义keyvalue键值对。ArrayList、linkedlist、vector实现了list接口。也称线性集合。数据有序可重复。ArrayList:底层实现的数组,线程不安全的,效率
Wesley13 Wesley13
2年前
java16
1:List的子类(掌握)(1)List的子类特点ArrayList:底层数据结构是数组,查询快,增删慢线程不安全,效率高Vector:底层数据结构是数组,查询快,增删慢线程安全,效率低LinkedList:底层数据结构是链表,查询慢,增删快线程不安全,效率高(2)ArrayListA:
Stella981 Stella981
2年前
50道Java集合经典面试题(收藏版)
前言来了来了,50道Java集合面试题来了!1\.Arraylist与LinkedList区别可以从它们的底层数据结构、效率、开销进行阐述哈ArrayList是数组的数据结构,LinkedList是链表的数据结构。随机访问的时候,ArrayList的效率比较高,因为LinkedList要移动指针,而
Stella981 Stella981
2年前
List接口(动态数组)
List接口(动态数组)List集合类中元素_有序且可重复_ArrayList(重要)作为List接口的主要实现类线程不安全的,效率高底层使用Object\\elementData数组存储ArrayList的源码分析jdk7
Wesley13 Wesley13
2年前
Java内功系列
面试官:你能简单介绍List和Set有什么区别吗?小憨:List是一个有序的集合,在内存是连续存储的,可以存储重复的元素,List查询快,增删慢;Set是一个无序的集合,在内存中不连续,不可以存储重复的元素,Set增删快,查询慢;面试官:那HashSet是如何保证元素不重复的?小憨:3分钟。。。
Stella981 Stella981
2年前
BAT面试笔试33题:JavaList、Java Map等经典面试题!
JavaList面试题汇总1、List集合:ArrayList、LinkedList、Vector等。2、Vector是List接口下线程安全的集合。3、List是有序的。4、ArrayList和LinkedList数据结构不一样,前者用在查询较多的场合,后者适用于插入较多的场合。5、ArrayList使用的是
Stella981 Stella981
2年前
ArrayList的非快速失败机制和Vector与ArrayList的(基础)分析
/\\ \1、copyOnWriteArrayList 如何实现(nonfastfail)非快速失败机制??? \2、Vector底层源码,主要看属性,构造函数、增删改查方法、明白ArrayList与Vector之间的区别与联系 \(底层数据结构、效率、扩容机制、是否线程安全) \ \/