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

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

1 LinkedHashSet 2 底层数据结构由链表和哈希表组成。 3 由链表保证元素有序。 4 由哈希表保证元素唯一。 5 TreeSet 6 底层数据结构是红黑树。(是一种自平衡的二叉树) 7 如何保证元素唯一性呢? 8 根据比较的返回值是否是0来决定 9 如何保证元素的排序呢? 10 两种方式 11 自然排序(元素具备比较性) 12 让元素所属的类实现Comparable接口 13 比较器排序(集合具备比较性) 14 让集合接收一个Comparator的实现类对象 15Map(双列集合) 16 A:Map集合的数据结构仅仅针对键有效,与值无关。 17 B:存储的是键值对形式的元素,键唯一,值可重复。 18 19 HashMap 20 HashMap是Java 1.2引进的基于哈希表Map接口的一个非同步实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。 21 此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 22 底层数据结构是[数组+链表]组成的。线程不安全,效率高 23 哈希表依赖两个方法:hashCode()和equals() 24 执行顺序: 25 首先判断hashCode()值是否相同 26 是:继续执行equals(),看其返回值 27true:说明元素重复,不添加 28false:就直接添加到集合 29 否:就直接添加到集合 30 最终: 31 自动生成hashCode()和equals()即可 32 LinkedHashMap 33 底层数据结构由双向循环链表和哈希表组成。 34 由链表保证元素有序。 35 由哈希表保证元素唯一。 36 Hashtable 37 Hashtable是基于陈旧的Dictionary类,完成了Map接口。线程安全,效率低 38 哈希表依赖两个方法:hashCode()和equals() 39 执行顺序: 40 首先判断hashCode()值是否相同 41 是:继续执行equals(),看其返回值 42true:说明元素重复,不添加 43false:就直接添加到集合 44 否:就直接添加到集合 45 最终: 46 自动生成hashCode()和equals()即可 47 TreeMap 48 底层数据结构是红黑树。(是一种自平衡的二叉树) 49 如何保证元素唯一性呢? 50 根据比较的返回值是否是0来决定 51 如何保证元素的排序呢? 52 两种方式 53 自然排序(元素具备比较性) 54 让元素所属的类实现Comparable接口 55 比较器排序(集合具备比较性) 56 让集合接收一个Comparator的实现类对象

2.关于集合选取原则

1是否是键值对象形式: 2 是:Map 3 键是否需要排序: 4 是:TreeMap 5 否:HashMap 6 不知道,就使用HashMap。 7 8 否:Collection 9 元素是否唯一: 10 是:Set 11 元素是否需要排序: 12 是:TreeSet 13 否:HashSet 14 不知道,就使用HashSet 15 16 否:List 17 要安全吗: 18 是:Vector 19 否:ArrayList或者LinkedList 20 增删多:LinkedList 21 查询多:ArrayList 22 不知道,就使用ArrayList 23 不知道,就使用ArrayList

3:集合的常见方法及遍历方式 Collection: add() remove() contains() iterator() size()

1 遍历: 2 增强for 3 迭代器 4 5 |--List 6 get() 7 8 遍历: 9 普通for 10 |--Set 11 12Map: 13 put() 14 remove() 15 containskey(),containsValue() 16 keySet() 17 get() 18 value() 19 entrySet() 20 size() 21 22 遍历: 23 根据键找值 24 根据键值对对象分别找键和值
点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java16

1:List的子类(掌握)(1)List的子类特点ArrayList:底层数据结构是数组,查询快,增删慢线程不安全,效率高Vector:底层数据结构是数组,查询快,增删慢线程安全,效率低LinkedList:底层数据结构是链表,查询慢,增删快线程不安全,效率高(2)ArrayListA:

java 面试

1、ArrayList、Vector、LinkedList之间的区别?ArrayList:底层数组,查询快,增删慢,线程不安全,效率高Vector:底层数组,查询快(由于线程安全,其实查询也不快),增删慢,线程安全,效率低LinkedList:底层双重链表,查询慢,增删快,线程不安全,效率高。3、列举Co

java集合基础复习

温故知新,好一段学习时间过后到了收割的季节。java中集合java.util包下的一个集合根接口collection,其子接口list和set,map接口定义keyvalue键值对。ArrayList、linkedlist、vector实现了list接口。也称线性集合。数据有序可重复。ArrayList:底层实现的数组,线程不安全的,效率