第十二章Java集合类

collection接口

collection接口是层次接口中的根接口,构成collection的单位成为元素。collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法,由于list接口与set接口都继承了collection接口,因此这些方法对list集合与set集合哦通用的

list集合

List集合为列表类型,以线性方式存储对象。List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。用户可以通过使用索引来访问List集合中的元素。

ArrayList支持可随需要而增长的动态数组。在Java数组中,长度是固定的,因此在数组被创建后,不能修改长度,这意味着开发者需要实现知道数组的长度。但在一般情况下,只有在运行时才知道数组长度。为了解决这个问题,ArrayList因此而生。

Output:

list1初始长度为:0
list1加入元素后的大小:7
list1元素为:[A, B2, B, C, D, E, F]
list1删除元素后的大小:5
list1元素为:[B2, B, D, E, F]      // 需要移动数据,使得B2作为index=0的元素。
注意,list1开始为空,随着元素的加入,大小增加。当每个元素被删除时,大小会每次变小。

底层是使用数组实现,所以查询速度快,增删速度慢

4.LinkedList集合
除了LinkedList继承的方法以外,它本身还定义了一些有用的方法。
addFirst()可以在列表头增加元素
addLast()可以在列表尾部增加元素
getFirst()可以获取第一个元素
removeFirst()可以删除第一个元素
removeLast()可以删除最后一个元素
getFirst() 返回此列表的第一个元素
getLast() 返回此列表的最后一个元素

LinkedList:是基于链表结构实现的,所以查询速度慢,增删速度快,提供了特殊的方法,对头尾的元素操作(进行增删查)

使用LinkedList实现栈

import java.util.LinkedList;

public class MyStack {
    private LinkedList<String> linkList = new LinkedList<String>();
    
    // 压栈
    public void push(String str){
        linkList.addFirst(str);
    }
    
    // 出栈
    public String pop(){
        return linkList.removeFirst();
    }
    
    // 查看
    public String peek(){
        return linkList.peek();
    }
    
    // 判断是否为空
    public boolean isEmpty(){
        return linkList.isEmpty();
    }
}

public class Test {
    public static void main(String[] args) {
    
        StackTest stack = new StackTest();
        stack.push("first");
        stack.push("second");
        stack.push("third");
        stack.push("forth");
        stack.push("fifth");
        // 取出
        while (!stack.isEmpty()){
            String pop = stack.pop();
            System.out.println(pop);
        }
       
    }

}

Output

        fifth
        fourth
        third
        second
        first
也可实现队列。

5.ArrayList与LinkedList
ArrayList和LinkedList顾名思义,ArrayList是Array(动态数组)的数据结构,相当于动态数组;LinkedList是Link(链表)的双向数据结构,也可当作堆栈、队列、双端队列。
对于随机访问List时(get和set操作),ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据(可以在上述ArrayList代码中体现)。
两者缺点都为线性不安全
ArrayList和LinkedList线程不安全,在多线程中不建议使用。
 

set集合

Set 对象是值的合集(collection)。集合(set)中的元素只会出现一次,即集合中的元素是唯一的。你可以按照插入顺序迭代集合中的元素。插入顺序对应于 add() 方法成功将每一个元素插入到集合中(即,调用 add() 方法时集合中不存在相同的元素)的顺序。

规范要求集合的实现是“对合集中的元素的平均访问时间与集合中元素的数量呈次线性关系”。因此,它可以在内部表示为哈希表(查找的时间复杂度为 O(1))、搜索树(查找的时间复杂度为 O(log(N)))或任何其他的时间复杂度低于 O(N) 的数据结构。

值的相等

值的相等是基于零值相等算法的。(曾使用会将 0 和 -0 视为不同值的同值算法。参见浏览器兼容性。)这意味着 NaN 和 undefined 会被视为是相同的值(即使 NaN !== NaN),而所有其他的值则基于 === 运算符的语义进行相等比较。

性能

has 方法检查某个值是否在集合中,其采用的方式的平均时间比逐个测试先前添加到集合中的元素更快。特别是当一个数组的长度(length)等于集合的大小(size)时,这比 Array.prototype.includes 方法的平均速度更快。


2.Map集合常用实现类


2.1 HashMap
​ HashMap底层采用哈希表的数据结构,非线程安全的。

2.2 HashTable
​ HashTable底层采用哈希表的数据结构,线程安全的,效率太低,使用较少,现在控制线程安全有其他的方式。

2.2.1 Properties
​ Properties是HashTable下的一个实现类,由于继承了HashTable,所以Properties也是线程安全的,Properties的key和value只支持String数据类型。

2.3 SortedMap
​ SortedMap继承Map,所以SortedMap也有无序不可重复的特点,但SortedMap集合中key的元素可以自动按照大小排列,称为可排列集合。

2.3.1 TreeMap
​ TreeMap是SortedMap的实现类,底层采用二叉树的数据结构,无序不可重复,但存入key的元素会按照大小排列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值