您的位置:首页 > 新闻 > 资讯 > 搜企业信息的网站_标志设计作业_合肥网站优化搜索_百度关键词屏蔽

搜企业信息的网站_标志设计作业_合肥网站优化搜索_百度关键词屏蔽

2025/8/7 14:54:56 来源:https://blog.csdn.net/weixin_44435110/article/details/147168494  浏览:    关键词:搜企业信息的网站_标志设计作业_合肥网站优化搜索_百度关键词屏蔽
搜企业信息的网站_标志设计作业_合肥网站优化搜索_百度关键词屏蔽

文章目录

    • 一、Java集合框架概览
    • 二、核心集合类详解
      • 1. List接口(有序、可重复)
        • **ArrayList**
        • **LinkedList**
        • **List对比表**
      • 2. Set接口(无序、唯一)
        • **HashSet**
        • **TreeSet**
        • **Set对比表**
      • 3. Queue接口(队列)
        • **PriorityQueue**
      • 4. Map接口(键值对)
        • **HashMap**
        • **LinkedHashMap**
        • **Map对比表**
    • 三、工具类与线程安全
      • 1. **Collections工具类**
      • 2. **线程安全集合**
    • 四、最佳实践与使用场景
      • 1. **常见场景推荐**
      • 2. **注意事项总结**
    • 五、Java 8+ 增强
      • **Stream API操作集合**
    • 六、总结

一、Java集合框架概览

Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作数据集合的核心工具,主要分为两大接口:

  • Collection:存储单一元素(List、Set、Queue)
  • Map:存储键值对(HashMap、TreeMap)

二、核心集合类详解

1. List接口(有序、可重复)

ArrayList
  • 初始化
    List<String> list = new ArrayList<>();          // 默认容量10
    List<String> list2 = new ArrayList<>(20);       // 指定初始容量
    
  • 排序
    Collections.sort(list);                        // 自然排序(元素需实现Comparable)
    Collections.sort(list, (a, b) -> b.compareTo(a)); // 自定义排序
    
  • 长度list.size()
  • 判空list.isEmpty()
  • 使用场景:频繁随机访问(get/set),数据量较小。
  • 注意事项
    • 线程不安全,多线程环境需同步。
    • 扩容机制(默认扩容1.5倍),频繁插入需预分配容量。
LinkedList
  • 初始化
    LinkedList<String> linkedList = new LinkedList<>();
    
  • 使用场景:频繁在头尾插入/删除(如实现栈、队列)。
  • 注意事项:随机访问效率低(时间复杂度O(n))。
List对比表
特性ArrayListLinkedList
底层结构动态数组双向链表
随机访问速度O(1)O(n)
头部插入/删除速度O(n)O(1)
内存占用较低(无指针)较高(存储指针)

2. Set接口(无序、唯一)

HashSet
  • 初始化
    Set<String> set = new HashSet<>(20, 0.9f); // 指定容量和负载因子
    
  • 判空set.isEmpty()
  • 使用场景:快速去重、判断元素存在性。
  • 注意事项:元素需正确实现hashCode()equals()
TreeSet
  • 初始化
    Set<Integer> treeSet = new TreeSet<>(Comparator.reverseOrder()); // 逆序
    
  • 使用场景:需要有序且唯一的元素集合。
  • 注意事项:插入/删除时间复杂度O(log n)。
Set对比表
特性HashSetTreeSet
底层结构哈希表红黑树
元素顺序无序自然/自定义排序
时间复杂度(增删查)O(1) 平均O(log n)

3. Queue接口(队列)

PriorityQueue
  • 初始化
    Queue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder()); // 大顶堆
    
  • 使用场景:任务调度(按优先级处理)、Top K问题。
  • 注意事项:线程不安全,队首元素为最小值(默认自然排序)。

4. Map接口(键值对)

HashMap
  • 初始化
    Map<String, Integer> map = new HashMap<>(20, 0.8f); // 指定容量和负载因子
    
  • 排序
    // 按键排序
    TreeMap<String, Integer> sortedMap = new TreeMap<>(map);
    
  • 使用场景:快速键值存取、缓存实现。
  • 注意事项:键对象需正确实现hashCode()equals()
LinkedHashMap
  • 使用场景:保留插入顺序或实现LRU缓存。
    Map<String, Integer> lruCache = new LinkedHashMap<>(16, 0.75f, true) {@Overrideprotected boolean removeEldestEntry(Map.Entry eldest) {return size() > 100; // 保留最近100个访问}
    };
    
Map对比表
特性HashMapTreeMapLinkedHashMap
底层结构哈希表红黑树哈希表+链表
顺序无序按键排序插入/访问顺序
时间复杂度(增删查)O(1) 平均O(log n)O(1) 平均

三、工具类与线程安全

1. Collections工具类

  • 排序与安全
    Collections.sort(list);                          // 排序
    List<String> syncList = Collections.synchronizedList(list); // 线程安全包装
    

2. 线程安全集合

场景非线程安全类线程安全替代方案
高并发ListArrayListCopyOnWriteArrayList
高并发MapHashMapConcurrentHashMap
高并发QueuePriorityQueuePriorityBlockingQueue

四、最佳实践与使用场景

1. 常见场景推荐

需求推荐集合理由
快速查询元素ArrayList / HashMap随机访问时间复杂度O(1)
频繁插入删除(头尾)LinkedList链表操作时间复杂度O(1)
数据去重HashSet哈希表去重效率高
需要自然排序TreeSet / TreeMap红黑树自动维护有序性
实现LRU缓存LinkedHashMap通过accessOrderremoveEldestEntry
高并发环境ConcurrentHashMap分段锁保证线程安全

2. 注意事项总结

  • 线程安全:默认集合类非线程安全,多线程环境需显式同步。
  • 初始容量:预估数据量,避免频繁扩容(如ArrayList默认扩容1.5倍)。
  • 对象一致性HashSet/HashMap的键对象不可变,避免哈希值变化。
  • 迭代器安全:遍历时修改集合可能引发ConcurrentModificationException

五、Java 8+ 增强

Stream API操作集合

List<String> filteredList = list.stream().filter(s -> s.startsWith("A")).map(String::toUpperCase).collect(Collectors.toList());

六、总结

Java集合框架提供了丰富的工具类,开发者应根据具体需求选择合适的集合类型:

  • 查询多ArrayList / HashMap
  • 增删多LinkedList / LinkedHashMap
  • 排序需求TreeSet / TreeMap
  • 线程安全ConcurrentHashMap / CopyOnWriteArrayList

正确使用集合框架能显著提升代码性能和可维护性。建议结合场景需求,合理选择初始容量、排序方式及线程安全策略。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com