java-容器 02
Java 集合框架 2
1.入门
Collection接口是集合框架层次结构的根接口。
Java没有提供直接实现Collection接口,但是像提供其子接口List,Set和Queue的实现
https://www.cainiaojc.com/java/java-collections.html
--各类集合的接口
只求了解其结构-了解结构实现
2.List
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 堆栈
结构图
在堆栈中,元素以后进先出的方式存储和访问。也就是说,元素被添加到堆栈的顶部并从堆栈的顶部移除。
方法push pop peek search empty
5.LinkedLis 链表结构 -双端数据结结构
-
Prev - 将前一个元素的地址存储在列表中。 第一个元素为null。
-
Next - 在列表中存储下一个元素的地址。 最后一个元素为null。
-
Data - 存储实际数据。
结构图
-
Dog - 第一个元素将null作为前一个地址,并将Cat的地址作为下一个地址
-
Cat - 第二个元素将Dog的地址作为前一个地址,将Cow的地址作为下一个地址
-
Cow - 最后一个元素将Cat的地址作为前一个地址,并将null作为下一个元素
双向链表-遇到再说
https://www.cainiaojc.com/java/java-linkedlist.html
3.Quenue
1.Quenue了解
于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集合不能包含重复的键。并且,每个键都与一个值相关联。
Map接口维护3个不同的集合:
- 键集
- 值集
- 键/值关联(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
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区别 -不许重复值
后续关于一些数据存储--就的百度看看谁搜索 插值快了-具体数据结构-后续再深入
本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/18088544