Collection下的常用集合以及List和Set

本文详细介绍了Java中的集合框架,包括Collection及其子接口List和Set的基本概念、特点、常用方法及其实现类。针对不同的应用场景,对比了ArrayList、LinkedList、Vector等List实现类以及HashSet、TreeSet等Set实现类的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Collection

Collection下的继承结构图

在这里插入图片描述
Collection下有两个子接口List和Set,不管是List还是Set,他们都可以使用迭代器进行迭代

Collection中常用的方法

  1. add(Object obj) 向集合尾部添加新元素,返回值类型是boolean
  2. size() 获取集合中元素的个数,返回值类型是int
  3. clear() 清空集合,返回值类型是void
  4. contains(Object obj) 判断集合中是否包含某个元素,底层调用了equals方法,如果集合中放入的是自定义类,必须重写equals方法,返回值类型是boolean
  5. remove(Object obj) 删除集合中的某个元素,底层调用了equals方法,返回值类型是Boolean
  6. isEmpty() 判断集合是否为空,返回值类型是boolean
  7. toArray() 将集合转换成数组,返回值类型是Object[]
  8. iterator() 获取集合的迭代器,返回值类型是Iterator

List

List接口的特点是有序(有序指的是存入的顺序和取出的顺序一致)可重复,有下标

List接口中特有的方法

List除了从Collection中继承过来的方法之外,还有一些特有的方法

  1. add(int index,Object obj )向指定位置加入元素,返回值类型是boolean
  2. get(int index) 获取某一下标的元素,返回值类型是Object
  3. indexOf(Object obj) 获取某一对象在集合中第一次出现处的索引,返回值类型是int
  4. lastIndexOf(Object obj) 获取某一对象在集合中最后一次出现处的索引,返回值类型是int
  5. remove(int index) 删除某一下标对应的元素,返回值类型是Object
  6. set(int index,Object obj) 修改某一下标的元素,返回值类型是Object
List接口中的常用实现类
ArrayList
  1. ArrayList是List接口的实现类,它的底层采用了Object[]数组进行存储,数组中的元素在空间存储上是连续的
  2. ArrayList的默认初始化容量是10(在新版jdk中是创建一个长度为0的数组,当加入第一个元素是,容量为10)
  3. 每次扩容增加的容量是用原容量右移一位,即新容量是原容量的1.5倍 例如:20->30->45
  4. 合理的给定一个初始化容量,减少扩容次数可以有效的提升性能
  5. ArrayList是非线程安全的
  6. 优点:检索效率高
  7. 缺点:随机增删效率比较低,涉及到了部分的左移与右移,但在末尾增删,效率不受影响;另外,由于ArrayList底层采用的是数组的数据结构,数组在存储空间上是连续的,所以ArrayList不适合存储大数据的信息,因为我们很难在内存上找到一块很大的连续空间
LinkedList
  1. .LinkedList是List接口的实现类,底层采用双向链表的数据结构
  2. 存储在链表中的元素在空间存储上是不连续的
  3. 优点:随机增删效率较高
  4. 缺点:检索效率较低,因为检索时,我们需要从头开始依次检索
Vector
  1. Vector是List接口的实现类,底层采用数组的数据结构进行存储
  2. Vector的默认初始化容量是10,每次扩容后的新容量是原容量的2倍 例如:10->20->40
  3. Vector的方法都有symchronized关键字,是线程安全的,导致了效率降低,普遍使用减少(因为我们可以直接用java.util.Collections集合工具类将一个非线程安全的ArrayList转换成线程安全的)
  4. 因为Vector底层也是采用的数组,所以它的优缺点与ArrayList的大致相同

Set

Set接口的特点是无序(无序指的是存入的顺序和取出的顺序不一致)不可重复,没有下标

Set的实现类
HashSet
  1. HashSet是Set接口的实现类,的底层数据结构是哈希表,哈希表是由一个数组和多条单向链表组合而成,综合了数组与链表的优缺点
  2. 放入HashSet中的元素其实就是放入HashMap的key部分
  3. 调用add()方法进行添加时,通过被添加对象的hashcode()方法和equals()进行判断,确认被添加元素是否已经出现在hashset中。
  4. 无序:存入的顺序和取出的顺序不同 ;不可重复
Set的子接口 SortedSet

Sorted是一个排序的接口,实现此接口的类都可以遵循一定的排序规则进行排序,若是放入自定义类,需要自定义排序规则

TreeSet
  1. 1.TreeSet是Set接口的实现类,他实现了Set的子接口SortedSet
  2. TreeSet的底层数据结构是自平衡二叉树,实现了排序,即使用迭代器或者for循环进行遍历时取出的元素是按从小到大的顺序排序的,又称为可排序集合
  3. 放入TreeSet中的元素相当于放入TreeMap中的key部分
  4. 如果往TreeSet中放入自定义对象时,该对象应该实现Comparable接口或者传入比较器,因为此时的排序规则有程序员自己定义

Collection接口下的集合的遍历

第一种遍历方式:使用迭代器
因为Collection它继承与Iterable接口,意思是Collection下的所有集合类都可以获取迭代器,用迭代器进行遍历

//第一种迭代方式
		Iterator iterator = list.iterator();
		while(iterator.hasNext()) {
			System.out.print(iterator.next() + "  ");
		}

第二种遍历方式:for循环
这种遍历方式只使用与List集合,因为List集合是有下标,可以利用下标对集合进行遍历

//第二种遍历方式
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i) + "  ");
		}

第三种遍历方式:增强for
这种遍历方式可用于遍历集合和数组

//第三种遍历方式
		for(Object object : list) {
			System.out.print(object + "  ");
		}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值