Java集合-List、Set

目录

什么是集合?

集合接口

Collection接口

List接口

ArrayList

Linkedlist

Vector

Set接口

HashSet

LinkedHashSet

TreeSet

Hashset如何过滤重复元素

Queue接口


什么是集合?

        集合就是“由若干个确定的元素所构成的整体”。

        在Java中,集合是一种容器,用于保存和操作其他Java对象。数组也可以被视为一种集合。

String[] str = new String[10];//创建一个数组
str[0] = "Hello";//放入String对象
String first = str[0];//可以获取String

集合接口

        Java标准库自带的java.util包提供了集合相关的接口和实现类:Collection接口,它是除Map接口外所有其他集合类的根接口。

Collection接口

        在Collection接口中,包含了单列集合,子接口。

List接口

        在集合类中,List是最基础的一种集合:它是一种有序列表。其特点是:有序,允许重复。

具体实现类主要包含了三大类:ArrayList类,LinkedList类,Vector类。

//简单创建一个ArrayList的对象
ArrayList<String> list = new ArrayList<String>();

List 是有序的、可重复的集合。它维护元素的插入顺序,可以包含重复元素;

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("apple"); // size=1
        list.add("pear"); // size=2
        list.add("apple"); // 允许重复添加元素,size=3
        System.out.println(list.size());
    }
}

主要实现类包括:

ArrayList:基于动态数组实现,提供随机访问和插入性能;

LinkedList :基于双向链表实现,适合频繁插入和删除操作;

Vector:类似ArrayList,基于动态数组实现,使用 synchronized 实现线程安全,性能略低;

stack:Vector类的子类,提供了 FILO 先进后出的结构;

Copy0nWriteArrayList:基于动态数组实现,使用 ReentrantLock实现线程安全;

ArrayList

数据结构:数组:Object[ ] elementData

使用场景:查找、遍历效率高,插入、删除效率低

初始容量: 初始默认容量为0,添加第一个元素时,扩容为 10;

扩容方式:在原有容量基础上,扩容 0.5 倍(新容量是原有容量的 1.5 倍);

线程安全:线程不安全(可使用 Copy0nWriteArrayList 集合解决);

Linkedlist

数据结构:双向链表

使用场景:查找、遍历效率低,插入、删除效率高

扩容方式:链表动态扩容,每添加一个节点,链表动态扩容一个元素空间

线程安全:线程不安全

Vector

数据结构:数组:Object[ ] elementData

初始容量:初始默认容量为10;

扩容方式:在原有容量基础上,扩容1倍(新容量是原有容量的 2倍);

线程安全:线程安全,操作方法使用 synchronized(同步锁)实现线程同步;

Set接口

        Map用于存储key-value的映射,对于充当key的对象,是不能重复的,并且,不但需要正确覆写equals()方法,还要正确覆写hashCode()方法。
如果我们只需要存储不重复的key,并不需要存储映射的value,那么就可以使用Set

特点: Set是不允许重复元素的集合。

public class Main {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        System.out.println(set.add("abc")); // true
        System.out.println(set.add("xyz")); // true
        System.out.println(set.add("xyz")); // false,添加失败,因为元素已存在
        System.out.println(set.contains("xyz")); // true,元素存在
        System.out.println(set.contains("XYZ")); // false,元素不存在
        System.out.println(set.remove("hello")); // false,删除失败,因为元素不存在
        System.out.println(set.size()); // 2,一共两个元素
    }
}

主要实现类包括:

HashSet :基于HashMap实现,元素唯一,无序;

LinkedHashSet:Hashset的子类,基于LinkedHashMap实现,元素唯一且有序,同时保持了哈希表的性能;

Treeset :基于 TreeMap 实现,元素唯一,自动排序或按照自定义规则排序;

HashSet

数据结构: HashMap

特点:无序

LinkedHashSet

数据结构:LinkedHashMap

特点:有序

TreeSet

数据结构:TreeMap

特点:自动排序

Hashset如何过滤重复元素

        Hashset 内部使用一个 HashMap 作为数据结构,保存元素时,会使用这个         Hashmap 的 key 来进行保存。key是唯一的所以重复元素会自动过滤。

Queue接口

        Queue是用于对元素进行先进先出(FIFO)操作的队列集合;一般来说,它只允许在集合的前端进行删除操作,而在集合的后端进行插入操作。

主要实现包括:
LinkedList:基于双向链表实现;

LinkedBlockingQueue:线程安全的阻塞队列,适用于多线程环境;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值