JAVA基础02-集合-Collection

Collection接口

  1. 数组有缺点:要求数据类型是单一类型 + 数组一旦创建长度不能变 + 遍历方式单一 + 不适合插入、删除
  2. 集合里有很多种工具类,都有很严格的继承结构.

1 List接口

有序 + 有整数索引 + 元素可重复 + 可以存储多个null

1.1 ArrayList实现类

1.1.1 ArrayList底层实现
  1. ArrayList 底层维护了一个Object[ ]
  2. 在jdk1.6里 , 一旦创建ArrayList,底层立刻分配10个数组的长度
  3. jdk1.8里为了优化内存,会延迟数组的初始化,并不会第一时间来分配10个空间,而是当你第一次向ArrayList中添加元素时,才开始分配空间.默认容量是10的数组
1.1.2 ArrayList扩容机制
  1. 最小需求容量大于实际容量时,会触发扩容机制
  2. ArrayList 每次扩容之后容量都会变为原来的 1.5 倍左右(oldCapacity为偶数就是1.5倍,否则是1.5倍左右)
  3. 然后检查新容量是否大于最小需要容量,若还是小于最小需要容量,那么就把最小需要容量当作数组的新容量
  4. 如果新容量大于 MAX_ARRAY_SIZE,比较 minCapacity 和 MAX_ARRAY_SIZE,如果minCapacity大于最大容量,则新容量则为Integer.MAX_VALUE,否则,新容量大小则为 MAX_ARRAY_SIZE 即为 Integer.MAX_VALUE - 8
1.1.3 ArrayList特点

查询快,增删慢,轻量级;(线程不安全)

1.2 LinkedList实现类

1.2.1 LinkedList底层实现
  1. 底层维护了一个双向链表结构.空间不连续
  2. 链表上有两个高效节点:首元素和尾元素
1.2.2 LinkedList特有方法
  1. void addFirst(E e)
  2. void addLast(E e)
  3. E getFirst()
  4. E getLast()
  5. E removeFirst()
  6. E removeLast()
  7. 。。。
1.2.3 LinkedList特点

增删快,查询慢 (线程不安全)

1.3 List遍历的三种方式

1.3.1 for循环遍历
for (int i=0;i<list.size();i++){
	System.out.println(list.get(i));
}
1.3.2 foreach遍历
 for (String str:list){
	System.out.println(str);
}
1.3.3 用iterator迭代器进行遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
	String next = iterator.next();
	System.out.println(next);
}

2 Set接口

元素无序 + 不能重复 + 没有下标 + 只能存一个null

2.1 HashSet实现类

2.1.1 HashSet底层实现

基于HashMap实现的,HashSet底层使用HashMap来保存所有元素

2.1.2 HashSet使用

  • set集合给 自定义对象去重
    需要同时提供 ,重写的hashCode()和 equals() !!
  1. 重写hashCode()–因为需要按照对象的属性值来计算hash值,而不是new一次算一个
  2. 重写equals() --因为需要比较两个对象间的属性值,而不是比较地址值

2.2 LinkedHashSet实现类

2.1.1 LinkedHashSet与HashSet的区别

LinkedHashSet维护着一个运行于所有条目的双重链接列表。存储的数据是有序的

3 Collections工具类

专门用来给Collection提供丰富的功能.类似数组里的工具类Arrays.

  1. Collections.addAll(Collection c, T… elements) 将所有指定元素添加到指定 collection 中。
  2. Collections.copy(List<? super T> dest, List src) 将所有元素从一个列表复制到另一个列表。
  3. Collections.max(Collection<? extends T> coll)
  4. Collections.min(Collection<? extends T> coll)
  5. Collections.reverse(List<?> list) 反转指定列表中元素的顺序。
  6. Collections.swap(List<?> list, int i, int j) 在指定列表的指定位置处交换元素。
  7. Collections.sort(List list) 排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值