赞
踩
目录
4. 并发集合 (Concurrent Collections)
5. 并发集合(Concurrent Collections)
一 java数据结构的集合框架
数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合。它包含三方面的内容,逻辑关系、存储关系及操作。
Java 集合框架(Java Collections Framework,JCF)是 Java 标准库中用于处理集合(如列表、集合和映射)的架构。集合框架提供了多种数据结构和算法的实现,使得开发人员能够方便地操作数据集合。以下是 Java 集合框架的一些关键组件:
Java 集合框架定义了一组标准接口,以支持不同类型的集合。主要接口包括:
ArrayList
、LinkedList
。HashSet
、LinkedHashSet
、TreeSet
。LinkedList
、PriorityQueue
。ArrayDeque
、LinkedList
。HashMap
、LinkedHashMap
、TreeMap
。Java 集合框架提供了各种集合接口的实现类:
List
接口,支持快速随机访问。List
和 Deque
接口,适合频繁插入和删除操作。Set
接口,不保证顺序。Set
接口,维护插入顺序。NavigableSet
接口,按自然顺序或提供的比较器排序。Map
接口,键值对无序。Map
接口,维护插入顺序或访问顺序。NavigableMap
接口,按自然顺序或提供的比较器排序。Queue
接口,元素按自然顺序或提供的比较器排序。集合框架还提供了一组算法(静态方法),主要位于 Collections
类中,如排序、搜索和修改集合的方法:
Collections.sort(list)
用于对列表进行自然排序。Collections.binarySearch(list, key)
用于在排序列表中执行二分查找。Collections.shuffle(list)
用于随机打乱列表中的元素。Collections.reverse(list)
用于反转列表中的元素顺序。Collections.swap(list, i, j)
用于交换列表中两个位置的元素。Collections.max(collection)
和 Collections.min(collection)
用于找到集合中的最大和最小值。为了支持多线程环境,Java 集合框架还提供了一些线程安全的集合类,位于 java.util.concurrent
包中:
CopyOnWriteArrayList
实现。Java 集合框架通过这些接口、实现类和算法,提供了丰富的数据结构和操作方法,极大地简化了集合数据的处理。
使用成熟的集合框架,有助于我们便捷、快速的写出高效、稳定的代码
二 时间和空间复杂度
算法的好与坏,取决于算法的效率。
在Java集合框架中,不同数据结构和算法的效率是关键考虑因素。了解这些效率可以帮助你选择最适合特定应用场景的数据结构。下面列出了一些常用集合类的时间复杂度和空间复杂度:
选择合适的数据结构和算法时需要根据具体的使用场景来考虑,尤其是数据量和操作的频率。例如,若需要频繁访问元素,ArrayList
是更好的选择;若需要频繁插入和删除元素,LinkedList
更为适合;若需要快速查找和删除元素,HashSet
或 HashMap
是不错的选择。
了解这些效率能够帮助你在开发过程中做出更明智的决策,从而提高应用程序的性能和效率。
- void fun(int N) {
- int count = 0;
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < N; j++) {
- count++;
- }
- }
- for (int k = 0; k <2*N ; k++) {
- count++;
- }
- int M=0;
- while ((M--)>0){
- count++;
- }
- System.out.println(count);
- }

Func 执行的基本操作次数 :
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
使用大O的渐进表示法以后,Func1的时间复杂度为:
另外有些算法的时间复杂度存在最好、平均和最坏情况: 最坏情况:任意输入规模的最大运行次数(上界) 平均情况:任意输入规模的期望运行次数 最好情况:任意输入规模的最小运行次数(下界)
- void func2(int N) {
- int count = 0;
- for (int k = 0; k < 2 * N ; k++) {
- count++;
- }
- int M = 10;
- while ((M--) > 0) {
- count++;
- }
- System.out.println(count);
- }
- void func3(int N, int M) {
- int count = 0;
- for (int k = 0; k < M; k++) {
- count++;
- }
- for (int k = 0; k < N ; k++) {
- count++;
- }
- System.out.println(count);
- }
- void func4(int N) {
- int count = 0;
- for (int k = 0; k < 100; k++) {
- count++;
- }
- System.out.println(count);
- }
- void bubbleSort(int[] array) {
- for (int end = array.length; end > 0; end--) {
- boolean sorted = true;
- for (int i = 1; i < end; i++) {
- if (array[i - 1] > array[i]) {
- Swap(array, i - 1, i);
- sorted = false;
- }
- }
- if (sorted == true) {
- break;
- }
- }
- }
- int binarySearch(int[] array, int value) {
- int begin = 0;
- int end = array.length - 1;
- while (begin <= end) {
- int mid = begin + ((end-begin) / 2);
- if (array[mid] < value)
- begin = mid + 1;
- else if (array[mid] > value)
- end = mid - 1;
- else
- return mid;
- }
- return -1;
- }
空间复杂度:最好:1
最坏:最坏次
空间复杂度(Space Complexity)是计算机科学中用于描述算法在运行过程中所需存储空间的一个指标。它通常表示为输入大小 nnn 的函数,即随着输入数据量的增加,算法所需要的额外内存空间如何变化。
5.1例题
- void bubbleSort(int[] array) {
- for (int end = array.length; end > 0; end--) {
- boolean sorted = true;
- for (int i = 1; i < end; i++) {
- if (array[i - 1] > array[i]) {
- Swap(array, i - 1, i);
- sorted = false;
- }
- }
- if (sorted == true) {
- break;
- }
- }
- }
-
使用了常数个额外空间,所以空间复杂度为 O(1)
三 初识泛型
在Java中,泛型(Generics)是一个强大的特性,它允许在定义类、接口和方法时使用类型参数。这意味着你可以编写代码时不必指定具体的数据类型,而是使用泛型参数来创建更通用和可重用的代码。
- public class Box<T> {
- private T item;
-
- public void set(T item) {
- this.item = item;
- }
-
- public T get() {
- return this.item;
- }
- }
- Box<String> stringBox = new Box<>();
- stringBox.set("Hello");
- String value = stringBox.get();
- public class Util {
- public static <T> void printArray(T[] array) {
- for (T element : array) {
- System.out.println(element);
- }
- }
- }
- Integer[] intArray = {1, 2, 3, 4, 5};
- Util.printArray(intArray);
-
- String[] stringArray = {"A", "B", "C"};
- Util.printArray(stringArray);
- public interface Container<T> {
- void add(T item);
- T get();
- }
- public class MyContainer<T> implements Container<T> {
- private T item;
-
- @Override
- public void add(T item) {
- this.item = item;
- }
-
- @Override
- public T get() {
- return item;
- }
- }
希望能对大家有所帮助
谢谢观看 ! ! ! !
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。