集合与集合框架

集合集合框架

Java集合框架提供了一套性能优良,使用方便的接口和类,它们都位于java.util包,其主要内容和彼此之间的关系如下图所示:

image-20230905202547257

image-20230905202632287

集合框架的三大类接口:Map接口,List接口和Set接口。

Collection接口

collection方法

image-20230905202949563

Iterable接口以及Iterator接口

Iterable接口

用for-each来遍历元素。

 for (String str : list){
            if ("d".equals(str)){
                list.remove(str);
            }
        }
        System.out.println(list);
    }

Iterator接口

此接口的两个方法:

.hasNext() 判断是否存在下一个可以访问的元素,如果仍有元素可以迭代,则返回true

.next() 返回要访问的下一个元素。

 Iterator<String> iterator = list.iterator();
        //通过迭代器遍历所有元素
        while (iterator.hasNext()){   //判断是否存在下一个可以访问的元素
            String str = iterator.next();   //用str来记录要访问的下一个元素
            if ("c".equals(str)){
                //list.remove(str);  这种删除会报错
                iterator.remove();
                continue;
            }
            System.out.println(str);
            }

Queue接口

image-20230905203052411

Deque接口 Deque 接口(双端队列)是 Java 标准库中的一种集合接口,代表了一种具有队列和栈特性的数据结构,支持在 队列的两端进行插入和删除操作。Deque 接口继承自 Queue 接口,提供了更丰富的操作,包括在队列的两端进 行插入、删除、检索等操作。

Deque 接口的主要特点包括:
(1)双向操作:Deque 接口允许在队列的两端进行插入、删除、检索操作。可以在队列的头部(前面)或尾部
(后面)插入、删除、检索元素,提供了更灵活的操作方式。
(2)队列特性:Deque 接口支持队列的特性,包括在队列的尾部进行插入操作,从队列的头部进行删除操作,
支持 FIFO(先进先出)的队列行为。
(3)栈特性:Deque 接口也支持栈的特性,包括在队列的头部进行插入(push)操作,从队列的头部进行删除
(pop)操作,支持 LIFO(后进先出)的栈行为。。
(4)实现类:Java 标准库中提供了多个实现了 Deque 接口的类,包括 ArrayDeque 和 LinkedList,它们分别提
供了不同的底层实现方式和性能特点,可以根据具体的使用场景选择合适的实现类。
另外,Deque 接口还提供了一些特定于队列和栈的方法,如 offerFirst、offerLast、peekFirst、peekLast、
pollFirst、pollLast 等,用于在队列的两端进行特定的操作

一:List接口的实现类

List接口继承自Collection接口,是有序集合。用户可以使用索引访问List接口中的元素,类似于数组。List接口中允许存放重复元素,也就是说,List可以存储一组不唯一,有序的对象。

1:Vector

Vector类的特点:

(1)动态数组:它的底层实现是一个数组,可以动态的调整数组的大小,根据需要自动扩容或缩小数组的容量。

(2)线程安全:所有方法都是同步的,可以在多线程环境中使用,保证了线程安全。

(3)支持随机访问

(4)可以包含重复元素

(5)可以插入null元素。

2:Vector类的常用方法

image-20230905200741196

image-20230905200815038

image-20230905200913056

image-20230905200936651

2:ArrayList

image-20230905230026076

3:LinkList

4:Stack

1:特点:

(1)后进后出

(2)继承自Vector。

2:常用方法

类型方法描述
booleanempty()测试此堆栈是否为空
Epeek()查看此堆栈顶部的对象而不将其从堆栈中移出
Epop()移除此堆栈顶部的对象并将该对象作为此函数的值返回
Epush(E item)将一个项目推到这个堆栈的顶部
intsearch(Object o)返回对象在此堆栈中的从1开始的位置

二:Set接口的实现类

Set

java.util.Set 不包含重复元素的集合、不能保证存储的顺序、只允许有一个 null

public interface Set<E>
extends Collection<E>

抽象方法,都是继承自 java.util.Collection 接口,在此不做重复描述。

Set 集合的实现类有很多,在此我们重点了解 HashSet 、 TreeSet 、 LinkedHashSet

TreeSet

public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable
  • 非线程安全

  • 值必须可比较(元素实现 Comparable 接口、传递 比较器 Comparator 对象)

  • 不能存 null

  • 判断是否是重复元素,是按照自然比较/比较器进行比较

就是说a.compareTo(b) == 0,如果是 true ,那么 add(a) 之后的 add(b) 将会返回 false ,

也就是添加失败

常用的构造方法

方法名描述
treeSet()构造一个新的空TreeSet集合,根据其元素的自然顺序
TreeSet(Comparator<?super E> comparator)构造一个新的空TreeSet集合,根据指定的比较器进行排序
TreeSet(Collection<?extends E> c)构造一个新的TreeSet集合,,该TreeSet集合包含指定集合中的元素,并根据其元素的自然顺序进行排序。

常用方法:

( Collection 接口的方法不在此赘述)

方法名返回值描述
ceiling(E e)E返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回null。
first()E返回当前在此集合中的第一个(最低的)元素。
floor(E e)E返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回null。
higher(e)E返回此集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回null。
lower(e)E返回此集合中严格小于给定元素的最大元素,如果没有这样的元素,则返回null.
pollFirst()E检索并删除第一个(最低的)元素,如果此集合为空,则返回null
pollLast()E检索并删除最后一个(最高的)元素,如果此集合为空,则返回null
tailSet(EfromElment)SortedsSet<[E]>返回此集合元素严格大于或等于fromElement的部分的视图
TreeSet<String> set = new TreeSet(List.of("null", "a", "a", "b", "c", "e", "f",
"g"));
System.out.println(set); // [a, b, c, e, f, g, null]
// 返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回null。
String ceiling = set.ceiling("d");
System.out.println(ceiling);// e
// 返回当前在此集合中的第一个(最低的)元素。
String first = set.first();
System.out.println(first); // a
// 返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回null。
String floor = set.floor("d");
System.out.println(floor); // c
// 返回此集合中元素严格小于toElement的部分的视图。
SortedSet<String> headSet = set.headSet("c");
System.out.println(headSet); // a, b
// 返回此集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回null。
String higher = set.higher("c");
System.out.println(higher); // e
// 返回此集合中元素严格大于或等于fromElement的部分的视图。
SortedSet<String> tailSet = set.tailSet("c");
System.out.println(tailSet); // c, e, f, g, null
// 迭代
for (Object obj : set){
System.out.println(obj);
}

HashSet

public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, Serializable

实现了 Set 接口,底层实现是 HashMap 。不保证迭代顺序,允许 null 元素

  • 非线程安全的

  • 如果 add 的值已存在( equals 方法返回 true ,基本数据类型自动装箱)返回 false

  • 如果 HashSet 中存的是对象,需要重写此对象类中的 equals 和 hashCode() 方法

构造方法:

方法名描述
HashSet()构造一个新的空集合,默认初始量(initialCapacity)和负载因子(0.75)
HashSet(Collection < ? extends E > c)构造一个包含指定集合中的元素的新集合
HashSet(int initialCapacity)构造一个新的空集合,默认初始容量(initialCapacity)和负载因子(0.75)
HashSet(int initialCapacity, float loadFactor)构造一个新的空集合,底层HashMap实例具有指定的初始容量和指定的负载因子

常用方法:

方法名返回值描述
add(Object o)boolean如果Set中尚未包含指定元素o,则添加指定元素o。
clear()void从Set中移除所有元素
size()int返回Set中的元素数量
isEmpty()boolean判断Set是否为空
contains(Object o)boolean判断Set是否包含元素o
remove(Object o)boolean如果Set中的存在指定元素o,则移除元素o

3:LinkedHashSet

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值