java集合知识点

Java集合知识点

容器

在这里插入图片描述

Collection集合使用

1)vector

Vector 是 Java 早期提供的线程安全的有序集合,如果不需要线程安全,不推荐使用该集合,同步是有线程开销的,基本不用.常用方法add(),remove()

2)ArrayList

ArrayList 是最常见的非线程安全的有序集合,因为内部是数组存储的,所以随机访问效率很高,但非尾部的插入和删除性能较低,如果在中间插入元素,之后的所有元素都要后移。ArrayList 的使用与 Vector 类似。替代了vector,查询速度快,增删比较慢
是基于数组实现的List类,底层实现是Object[]数组,是List接口的可变长数组实现,即动态数组,可以实现容量的动态增长。三种构造方法,ArrayList(),ArrayList(int n),ArrayList(collection c);

3) LinkedList

LinkedList 是使用双向链表数据结构实现的,因此增加和删除效率比较高,而随机访问效率较差。除add,remove外新增方法offer(): peek(),poll():

4)HashSet

HashSet 是一个没有重复元素的集合。虽然它是 Set 集合的子类,实际却为 HashMap 的实例,相关源码如下

public HashSet() {
    map = new HashMap<>();
}

因此 HashSet 是无序集合,没有办法保证元素的顺序性。
HashSet 默认容量为 16,每次扩充 0.75 倍

5) TreeSet

TreeSet 集合实现了自动排序,也就是说 TreeSet 会把你插入数据进行自动排序。不同步,实现compareable接口,覆盖compareTo方法,元素自身具有比较功能,红黑树算法

6)LinkedHashSet

LinkedHashSet 是按照元素的 hashCode 值来决定元素的存储位置,但同时又使用链表来维护元素的次序,这样使得它看起来像是按照插入顺序保存的

7) 集合与数组之间转化

List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
//集合转数组
String[] arr = list.toArray(new String[list.siez()]);
//数组转集合
List<String> list1 = Arrays.asList(arr);

Map

Map 常用的实现类如下:

  • HashTable: Java 早期提供的一个哈希表实现,它是线程安全的,不支持 null 键和值,因为它的性能不如 ConcurrentHashMap,所以很少被推荐使用。
  • HashMap: 最常用的哈希表实现,如果程序中没有多线程的需求,HashMap 是一个很好的选择,支持 null 键和值,如果在多线程中可用 ConcurrentHashMap 替代。
  • TreeMap: 基于红黑树的一种提供顺序访问的 Map,自身实现了 key 的自然排序,也可以指定 Comparator 来自定义排序。
  • LinkedHashMap:HashMap 的一个子类,保存了记录的插入顺序,可在遍历时保持与插入一样的顺序。

ConcurrentHashMap 和 Hashtable 是不允许 null 作为键和值的。
HashMap与 HashTable主要区别在于 HashMap 不是同步的,支持 null 键和值等。通常情况下,HashMap 进行 put 或者 get 操作,可以达到常数时间的性能,所以它是绝大部分利用键值对存取场景的首选

hashMap的数据结构

HashMap 底层的数据是数组被成为哈希桶,每个桶存放的是链表,链表中的每个节点,就是 HashMap 中的每个元素。在 JDK 8 当链表长度大于等于 8 时,就会转成红黑树的数据结构,以提升查询和插入的效率。

HashMap 有两个重要的参数:容量(Capacity)和负载因子(LoadFactor)。
  • 容量(Capacity):是指 HashMap 中桶的数量,默认的初始值为
  • 负载因子(LoadFactor):也被称为装载因子,LoadFactor 是用来判定 HashMap 是否扩容的依据,默认值为
    0.75f,装载因子的计算公式 = HashMap 存放的 KV 总和(size)/ Capacity。

桶中元素个数小于8时结构

1)Comparable

Comparable 位于 java.lang 包下,是一个排序接口,也就是说如果一个类实现了 Comparable 接口,就意味着该类有了排序功能。

2)Comparator

Comparator 是一个外部比较器,位于 java.util 包下,之所以说 Comparator 是一个外部比较器,是因为它无需在比较类中实现 Comparator 接口,而是要新创建一个比较器类来进行比较和排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值