-
集合和数组的区别
相同点:都可以存储对象,对外是一个整体,
数组的缺点是长度必须是初始化指定,固定大小不变,数组采用连续存储空间,查询效率快,有小标 ,删除和添加速度慢,需要整理下标,
不同点:数组可以存储引用类型和基本类型 集合只能存储对象,集合长度是自动扩容的, -
集合的接口
collection
list set
list接口存储数据不唯一,有序有下标
set接口唯一 无序
map接口 存储键值对,key映射到value, key是无序 唯一, value 不唯一 无序 -
list接口下的实现类
list
ArrayList LinkedList
ArrayList集合类是底层是数组线性表顺序表
在内存中分配连续的空间,实现了长度动态可变的数组,
优点是 遍历元素和查询访问元素效率高,有下标索引,
缺点是 添加元素和删除元素需要移动大量元素,导致效率低,
LinkedList集合类的底层是线性表和双向链表,
其实就是双向链表结构来存储数据,
优点是:添加和删除效率高,可以从头从尾从中间进行操作,
缺点是:遍历和访问元素效率低
比较集合内容用equals方法,用==号来比较引用 -
set
实现类 HashSet LinkedHashSet TreeSet
Hashset集合类
底层是采用哈希表数据结构来作为存储结构,采用hash值来进行映射,保证了数据的唯一性,
优点是 添加 删除 查询 速度快
缺点是 无序
LinkedHashSet实现类
采用哈希表存储结构,使用链表维护次序,
有序
TreeSet实现类
底层是红黑数存储结构
优点是:查询效率快,有序 注意比list还快
缺点是 :没有HashSet查询快 -
Map
实现类有 LinkedHashMap HashMap TreeMap
HashMap
特点是 key 无序 唯一 value 无序 不唯一
LinkedHashMap
有序 速度快
TreeMap
有序 速度没有hash快
-
在哈希表中判断两个元素是否重复要使用到hashCode()和equals()方法,hashCode()决定了数据在表中的存储位置就是地址,equals是判断是否是相同数据。
-
Collection和Collections有什么区别
Collection是一个集合接口,它提供了对集合对象进行的基本操作通用方法,所有的集合都是它的子类,
Collections是一个包装类,不能被实例化,一个工具类,提供给集合进行一些操作方法 -
如何决定使用HashMap还是TreeMap
对于map集合进行添加,删除,定位一个元素操作,Hashmap是最好选择,底层是hash表
如果想要对一个key集合进行有序遍历,treemap可以进行选择, -
HashMap实现原理
HashMap是基于hash算法实现的,通过put(key,value)来存储,get(key)来获取,
先定义key值根据key.hashCode()方法计算出hash值,根据hash值将value保存在集合中,hash值相同则value相同, -
ArrayList和LinkedList的区别是什么
arraylist集合的底层是动态数组数据结构,linkedlist 集合底层是双向链表数据结构,
arraylist集合随机访问效率高,linkedlist是线性的数据存储方式 查询从前到后依次进行
arraylist集合在增加和删除时效率低,下标的操作,linkedlist删除可以任意位置,
总结就是经常查询数据用arraylist ,经常添加删除用linkedList -
LinkedHashMap集合的特点
linkedHashmap集合是hashmap集合中的一个子类,能够保留添加顺序的记录,遍历时也是先进先出, -
Collections工具类
这个工具类它提供了Set,Map,List集合可以进行排序,填充和查找元素的方法,该类中的所有方法都是静态方法,
常用方法是:
sort(List) 对list集合内的元素进行排序,按照升序来排,
shuffle(list) 对元素进行随机排序,洗牌啊
reverse(List) 对元素进行逆序排序,
binarySearch(List,Object) 对顺序的list容器进行查找特定对象, -
集合
java的容器
collection容器
1 list集合 arraylist 基于数组实现的有序集合, linkedlist 基于链表实现的有序集合
2 set不重复 hashset 基于hash实现的不重复集合无序,linkedhashset 有序不重复集合, treeset 不重复可排序
map容器
1 hashtable key和value不为null,
2 hashmap key和value可以为null,