一丶集合概念
集合和数组的区别
- 长度区别:数组是固定的、集合是不定的;
- 内容区别:数组可以是基本类型,也可以是引用类型,而集合只能是引用类型;
- 元素区别:数组只能存储同一种类型,而集合可以存储不同类型(一般都存储同一类型)。
1. Collection集合的方法:

Java常用集合的分类:
- Collection(单列集合):存储一个元素集合
List接口:元素按进入先后有序保存,可以重复
LinkedList接口实现类:链表,插入删除,没有同步,线程不安全
ArrayList接口实现类:数组,随机访问,没有同步,线程不安全
Vector接口实现类:数组,同步,线程安全
Set接口:仅接受一次,不可重复,并做内部排序
HashSet:使用hash表(数组)存储元素
TreeSet:底层实现为二叉树,元素排好序
- Map:存储的是键值对(双列集合)
HashMap接口实现类,没有同步,线程不安全
LinkedHashMap 双向链表和哈希表实现
TreeMap:红黑树对所有的key进行排序
1.1. List和Set集合
- 有序性:List保证按顺序插入,Set存储和取出顺序不一致
- 唯一性:List可以重复,Set元素是唯一的
- 获取元素:List可通过索引直接操作元素,而Set不能根据索引获取元素
1.1 List:
- ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
- LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
- Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素
1.2 Set:
(1)HashSet:底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素;要保证元素的唯一性,就要重写hashCode()和equals()方法。
具体实现唯一性的比较过程:存储元素首先会使用hash()算法函数生成一个int类型hashCode散列值,然后已经的所存储的元素的hashCode值比较,如果hashCode不相等,则所存储的两个对象一定不相等,此时存储当前的新的hashCode值处的元素对象;如果hashCode相等,存储元素的对象还是不一定相等,此时会调用equals()方法判断两个对象的内容是否相等,如果内容相等,那么就是同一个对象,无需存储;如果比较的内容不相等,那么就是不同的对象,就该存储了,此时就要采用哈希的解决地址冲突算法,在当前hashCode值处类似一个新的链表, 在同一个hashCode值的后面存储存储不同的对象,这样就保证了元素的唯一性。
(2)LinkedHashSet:底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。
1.3 ArrayList和LinkedList的区别和适用场景
(1)ArrList
优点:底层是基于动态数组实现的数据结构,因为地址连续,查询效率较高;
缺点:因为地址连续,所以增加和删除操作效率较低。
(2)LinedList
优点:底层是基于链表实现的数据结构,地址是任意的,所以增加和删除操作效率较高;
缺点:由于它的地址任意,所以查询操作效率较低。
2.Map
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,可以是任何引用类型的数据,但key值不能重复。通过指定的key就能找到对应的value值。

2.1 HashMap:
HashMap的数据结构为:数组+链表+红黑树,使得查询、增加和删除的效率都很高。
public class Test {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("1","张三");
map.put("2","李四");
System.out.println(map.get("2"));
System.out.println(map);
}
}

特点:存储是无序的;它的键和值都可以为null,但是键的位置只能存在一个null;键的位置是唯一的,由底层的数据结构控制;
本文详细介绍了Java集合框架中的Collection和Map接口,包括List接口的ArrayList、LinkedList和Vector实现,以及Set接口的HashSet和TreeSet。此外,还讨论了ArrayList和LinkedList的区别和适用场景,以及Map接口的HashMap、LinkedHashMap和TreeMap的特性。特别强调了不同集合类的性能、线程安全性和数据结构实现。
2万+

被折叠的 条评论
为什么被折叠?



