网站首页 > java教程 正文
Java集合
集合就是一个可变长度的用来存放数据的容器,准确的说是存放数据对象引用的容器,集合类存放的都是对象的引用,而不是对象的本身(不能存储基本数据类型)。集合类存放于 Java.util 包中,主要有 3 种:set、list和 map。
1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。
2. Iterator:迭代器,可以通过迭代器遍历集合中的数据
3. Map:是映射表的基础接口
集合和数组的区别
数组是固定长度的;集合可变长度的。
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
Collection 和 Collections 有什么区别?
Collection是最基本的集合接口,Collection派生了两个子接口list和set,分别定义了两种不同的存储方式。
Collections是一个包装类,它包含各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等),此类不能实例化,就像一个工具类,服务于Collection框架。
List、Set与Map三者的区别?
List :存储的元素是有序的(按对象的顺序保存对象)、可重复的,允许多个Null元素对象,每个元素都有索引。
Set:存储的元素是?序的、不可重复的,最多允许一个Null元素对象,只能通过迭代器或foreach的方式进行遍历。
Map:以键值对(kye-value)的方式存储元素,Key 是?序的、不可重复的,value 是?序的、可重复的,每个键最多映射到?个值。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
List集合
Arraylist :基于动态的 Object[] 数组实现的,连序内存存储,适合下标访问(随机访问),适?于频繁的查找?作,数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
Vector : 基于动态的Object[] 数组,支持线程的同步,即某一时刻只有一个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问 ArrayList 慢
LinkedList : 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环),适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
Set集合
HashSet (?序,唯?): HashSet 底层就是基于 HashMap 实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为present。因此 HashSet 的实现比较简单,除了 clone() 、 writeObject() 、 readObject() 是 HashSet??不得不实现之外,其他?法都是直接调? HashMap 中的?法。
LinkedHashSet : LinkedHashSet 是 HashSet 的?类,并且其内部是通过 LinkedHashMap来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现?样,不过还是有?点点区别的。
TreeSet (有序,唯?):红黑树(自平衡的排序二叉树) 基于二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。(可以对Integer 和 String 对象都进行默认的排序,而自定义类的对象是不可以的,须实现 Comparable 接口,并且覆写相应的 compareTo()函数)
Map集合
HashMap : JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表?度?于阈值(默认为 8)(将链表转换成红?树前会判断,如果当前数组的?度?于 64,那么会选择先进?数组扩容,?不是转换为红?树)时,将链表转化为红?树,以减少搜索时间
LinkedHashMap : LinkedHashMap 继承? HashMap ,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红?树组成。另外, LinkedHashMap 在上?结构的基础上,增加了?条双向链表,使得上?的结构可以保持键值对的插?顺序。同时通过对链表进?相应的操作,实现了访问顺序相关逻辑。
Hashtable : 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突?存在的
TreeMap : 红?树(?平衡的排序?叉树)
尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili
猜你喜欢
- 2024-10-04 2021年Java集合面试Top问题 - 第一部分
- 2024-10-04 Java面试核心知识点(283页)Java面试题合集最新版(485页)
- 2024-10-04 自己把985道Java面试题整理细分26部分,五面成功面上滴滴
- 2024-10-04 花费半年整理拼多多、饿了么、蚂蚁金服等大厂Java面试题大集合
- 2024-10-04 JAVA集合类(大公司面试喜欢问的)(关于java集合的面试问题)
- 2024-10-04 不得不进来学习的Java面试题解答、第一天坚持打卡
- 2024-10-04 Java面试篇基础部分-Java中的集合类
- 2024-10-04 Java容器集合经典面试题集,你一定不要错过
- 2024-10-04 Java集合类常见面试知识点总结(java集合笔试题)
- 2024-10-04 java集合常见面试题进大厂必掌握---自行整理笔试题
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)