java-容器 02

Java 集合框架 2

1.入门

Java Collections Framework中的接口

Collection接口是集合框架层次结构的根接口。

Java没有提供直接实现Collection接口,但是像提供其子接口List,Set和Queue的实现

https://www.cainiaojc.com/java/java-collections.html

--各类集合的接口

只求了解其结构-了解结构实现

2.List

List接口是一个有序的集合,它允许我们按顺序存储和访问元素。它扩展了集合接口。

在Java中实现List接口的类

1.list方法

List接口包括Collection接口的所有方法。 这是因为Collection是List的超级接口。

Collection接口中还提供了一些常用的List接口方法:

  • add() - 将元素添加到列表
  • addAll() - 将一个列表的所有元素添加到另一个
  • get() - 有助于从列表中随机访问元素
  • iterator() - 返回迭代器对象,该对象可用于顺序访问列表的元素
  • set() - 更改列表的元素
  • remove() - 从列表中删除一个元素
  • removeAll() - 从列表中删除所有元素
  • clear() - 从列表中删除所有元素(比removeAll()效率更高)
  • size() - 返回列表的长度
  • toArray() - 将列表转换为数组
  • contains() - 如果列表包含指定的元素,则返回true
2.ArrayList

https://blog.csdn.net/Supper_Shenchao/article/details/131505504

ArrayList 其内部是以动态数组的形式来存储数据的

->还是定长-

这里的动态数组不是意味着去改变原有内部生成的数组的长度、而是保留原有数组的引用、将其指向新生成的数组对象、这样会造成数组的长度可变的假象;

---浪费空间

3.Vector

Vector类同步每个单独的操作。这意味着每当我们想对向量执行某些操作时,Vector类就会自动对该操作应用锁。

4.Stack 堆栈

Java Stack类扩展了Vector类

结构图

在堆栈中,元素以后进先出的方式存储和访问。也就是说,元素被添加到堆栈的顶部并从堆栈的顶部移除。

堆栈数据结构的工作

方法push pop peek search empty

5.LinkedLis 链表结构 -双端数据结结构链表实现的接口
  • Prev - 将前一个元素的地址存储在列表中。 第一个元素为null。

  • Next - 在列表中存储下一个元素的地址。 最后一个元素为null。

  • Data - 存储实际数据。

    结构图

    Java中LinkedList的工作

  • Dog - 第一个元素将null作为前一个地址,并将Cat的地址作为下一个地址

  • Cat - 第二个元素将Dog的地址作为前一个地址,将Cow的地址作为下一个地址

  • Cow - 最后一个元素将Cat的地址作为前一个地址,并将null作为下一个元素

双向链表-遇到再说

https://www.cainiaojc.com/java/java-linkedlist.html

3.Quenue

1.Quenue了解

ArrayDeque,LinkedList和PriorityQueue在Java中实现了Queue接口。

于Queue是一个接口,因此我们无法提供它的直接实现。

为了使用Queue的功能,我们需要使用实现它的类

结构图

队列数据结构的工作:先进先出。

在队列中,以先进先出的方式存储和访问元素。也就是说,从后面添加元素,从前面删除元素

// 使用 LinkedList 创建
Queue<String> animal1 = new LinkedList<>();

// 使用 ArrayDeque 创建
Queue<String> animal2 = new ArrayDeque<>();

// 使用 PriorityQueue创建
Queue<String> animal 3 = new PriorityQueue<>();
2.Queue的方法

Queue接口包括Collection接口的所有方法。 这是因为Collection是Queue的超级接口。

Queue接口的一些常用方法是:

  • add() - 将指定的元素插入队列。如果任务成功,则add()返回true,否则将引发异常。
  • offer() - 将指定的元素插入队列。如果任务成功,则offer()返回true,否则返回false。
  • element() - 返回队列的开头。如果队列为空,则引发异常。
  • peek() - 返回队列的开头。 如果队列为空,则返回null。
  • remove() - 返回并删除队列的头部。如果队列为空,则引发异常。
  • poll() - 返回并删除队列的开头。 如果队列为空,则返回null。
3.PriorityQueue -优先级队列

与普通队列不同,优先队列元素是按排序顺序检索的。

假设我们想以升序检索元素。在这种情况下,优先队列的头是最小的元素。检索到该元素后,下一个最小的元素将成为队列的头。

需要注意的是,优先队列的元素可能没有排序。但是,元素总是按排序顺序检索的。

add-每次插入元素-如果最小就排到头部嘛、

 public class test {
    public static void main(String[] args) {

        //创建优先队列
        PriorityQueue<Integer> numbers = new PriorityQueue<>();

        //使用add()方法
        numbers.add(4);
        numbers.add(2);
        System.out.println("PriorityQueue: " + numbers);

        //使用offer()方法


        numbers.offer(5);
        System.out.println("更新后的PriorityQueue: " + numbers);

        numbers.offer(3);
        System.out.println("更新后的PriorityQueue: " + numbers);
    }
}
PriorityQueue: [2, 4]
更新后的PriorityQueue: [2, 4, 5]
更新后的PriorityQueue: [2, 3, 5, 4]

//谜一般的排序--唯一能保证的是头部永远是最小的

4.Deque 双端队列 -

双端队列数据结构的工作

由于Deque继承了Queue接口,因此它继承了Queue接口的所有方法。

除了Queue接口中可用的方法之外,Deque界面还包括以下方法:

  • addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。
  • addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。
  • offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。
  • offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。
  • getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。
  • getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。
  • peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。
  • peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。
  • removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。
  • removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。
  • pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。
  • pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。

https://www.cainiaojc.com/java/java-deque.html

Java Collections框架的Stack类提供了堆栈的实现。

但是,建议Deque用作堆栈而不是Stack类。这是因为Stack的方法是同步的。

以下是Deque接口提供的用于实现堆栈的方法:

  • push() - 在双端队列的开头添加元素
  • pop() - 从双端队列的开头删除元素
  • peek() - 从双端队列的开头返回一个元素
5.ArrayDeque 数组双端队列

ArrayDeque该类使用数组来实现队列和双端队列数据结构。

与链表一样-都是双端-不同的是涉及数据搬移 浪费资源

4.Map

Map元素存储在键/值对中。 键是与各个值相关联的唯一值。

Map集合不能包含重复的键。并且,每个键都与一个值相关联。

Java中的map界面的工作

Map接口维护3个不同的集合:

  • 键集
  • 值集
  • 键/值关联(Map集合)的集合。

HashMap,TreeMap,EnumMap,LinkedHashMap和WeakHashMap类实现Java Map接口。

//使用HashMap类创建Map
Map<Key, Value> numbers = new HashMap<>();

Map接口包括Collection接口的所有方法。这是因为Collection是Map的超级接口。

除了Collection接口中可用的方法之外,Map接口还包括以下方法:

  • put(K,V) - 将键K和值V的关联插入到map中。如果键已经存在,则新值将替换旧值。
  • putAll() - 将指定Map集合中的所有条目插入此Map集合中。
  • putIfAbsent(K,V) - 如果键K尚未与value关联,则插入关联V。
  • get(K) - 返回与指定键K关联的值。如果找不到该键,则返回null。
  • getOrDefault(K,defaultValue) - 返回与指定键K关联的值。如果找不到键,则返回defaultValue。
  • containsKey(K) - 检查指定的键K是否在map中。
  • containsValue(V) - 检查指定的值V是否存在于map中。
  • replace(K,V) - 将键K的值替换为新的指定值V。
  • replace(K,oldValue,newValue) - 仅当键K与值oldValue相关联时,才用新值newValue替换键K的值。
  • remove(K) - 从键K表示的Map中删除条目。
  • remove(K,V) - 从Map集合中删除键K与值V相关联的条目。。
  • keySet() -返回Map集合中存在的所有键的集合。
  • values() -返回一组包含在Map集合中的所有值。
  • entrySet() -返回map中存在的所有键/值映射的集合。
1.Map类型

HashMap java集合框架的HashMap类提供Map接口的哈希表实现。

-将数据哈希化--我们传递搜索的值->哈希化进行比对

哈希表的优势在于能够通过哈希函数快速定位数据元素,而不需要像顺序存储结构或平衡树那样进行多次比较。

LinkedHashMap

LinkedHashMap继承了HashMap类,以将其条目存储在哈希表中。它在内部在所有条目之间维护一个双链列表,以对条目进行排序。

ConcurrentHashMap

Java集合框架的ConcurrentHashMap类提供了线程安全的映射。 也就是说,多个线程可以一次访问该映射,而不会影响映射中条目的一致性。

并发的哈希图

5.Set

接口SortedSet和NavigableSet扩展了Set接口。

Set集合不能包含重复的元素。

1.set方法

Set接口包含Collection接口的所有方法。 这是因为Collection是Set的超级接口。

Set接口中还提供了Collection接口的一些常用方法:

  • add() - 将指定的元素添加到集合中
  • addAll() - 将指定集合的所有元素添加到集合中
  • iterator() -返回一个迭代器,该迭代器可用于顺序访问集合中的元素
  • remove() - 从集合中移除指定的元素
  • removeAll() - 从存在于另一个指定集合中的集合中删除所有元素
  • keepAll() -保留集合中所有还存在于另一个指定集合中的所有元素
  • clear() - 从集合中删除所有元素
  • size() - 返回集合的长度(元素数)
  • toArray() - 返回包含集合中所有元素的数组
  • contains() - 如果集合包含指定的元素,则返回true
  • containsAll() - 如果集合包含指定集合的所有元素,则返回true
  • hashCode() -返回哈希码值(集合中元素的地址)

https://blog.csdn.net/m0_59619191/article/details/120362488

总结

list-结构 stack结构 Linkedl结构

quenue结构 Deque结构 ArrayDeque结构

数组存储 和链表存储区别 --开辟 和搜索

Map -键值

Set区别 -不许重复值

后续关于一些数据存储--就的百度看看谁搜索 插值快了-具体数据结构-后续再深入

posted @ 2024-03-22 00:14  逆向狗  阅读(22)  评论(0)    收藏  举报