前端网站开发兼职,php构建网站如何开始,怎样通过手机建网站,济南建设网站制作目录一、集合框架层次结构二、Collection集合2、Map集合1. HashMap - 最常用的Map2. LinkedHashMap - 保持插入顺序的Map3. TreeMap - 按键排序的Map4.ConcurrentHashMap - 高并发Map5.Collections.synchronizedMap6.性能对比表Java 集合框架#xff08;Collections Framework…目录一、集合框架层次结构二、Collection集合2、Map集合1. HashMap - 最常用的Map2. LinkedHashMap - 保持插入顺序的Map3. TreeMap - 按键排序的Map4.ConcurrentHashMap - 高并发Map5.Collections.synchronizedMap6.性能对比表Java 集合框架Collections Framework是 Java 中用于存储和操作数据组的重要架构。它提供了一组接口、实现类和算法。一、集合框架层次结构Collection (接口) ├── List (接口 - 有序可重复) │ ├── ArrayList (实现类) │ ├── LinkedList (实现类) │ ├── Vector (线程安全已过时) │ └── Stack (继承Vector) │ ├── Set (接口 - 无序不可重复) │ ├── HashSet (实现类) │ │ └── LinkedHashSet (保持插入顺序) │ ├── SortedSet (接口) │ │ └── TreeSet (实现类) │ └── EnumSet (专用于枚举) │ └── Queue (接口 - 队列) ├── Deque (双端队列接口) │ ├── ArrayDeque (实现类) │ └── LinkedList (也实现了Deque) │ ├── PriorityQueue (优先队列) └── BlockingQueue (阻塞队列接口) ├── ArrayBlockingQueue ├── LinkedBlockingQueue └── PriorityBlockingQueue Map (接口 - 键值对) ├── HashMap (实现类) │ └── LinkedHashMap (保持插入顺序) ├── TreeMap (基于红黑树) ├── Hashtable (线程安全已过时) ├── WeakHashMap (弱引用) └── ConcurrentHashMap (并发版)Java集合大致可以分为两大体系一个是Collection另一个是MapCollection主要由List、Set、Queue接口组成List代表有序、重复的集合其中Set代表无序、不可重复的集合Queue体系集合代表一种队列集合实现。Map则代表具有映射关系的键值对集合。java.util.Collection下的接口和继承类关系简易结构图java.util.Map下的接口和继承类关系简易结构图其中Java 集合框架中主要封装的是典型的数据结构和算法如动态数组、双向链表、队列、栈、Set、Map等。二、Collection集合通过集合的关系图我们可以知道Collection是集合的顶层父类他定义了集合的基本方法如基本操作方法方法签名功能描述返回值示例时间复杂度int size()返回集合中元素的数量元素个数list.size()→3O(1)boolean isEmpty()判断集合是否为空true/falselist.isEmpty()→falseO(1)boolean contains(Object o)判断是否包含指定元素true/falselist.contains(A)→trueList: O(n)Set: O(1)TreeSet: O(log n)boolean add(E e)添加元素到集合是否成功list.add(D)→trueArrayList: 均摊O(1)LinkedList: O(1)TreeSet: O(log n)boolean remove(Object o)移除指定元素是否成功list.remove(A)→trueArrayList: O(n)LinkedList: O(n)HashSet: O(1)批量操作方法方法签名功能描述返回值示例说明boolean containsAll(Collection? c)是否包含集合c中所有元素true/falselist.containsAll(subList)检查子集关系boolean addAll(Collection? extends E c)添加集合c中所有元素是否改变list.addAll(anotherList)批量添加boolean removeAll(Collection? c)移除集合c中所有元素是否改变list.removeAll(toRemove)差集操作boolean retainAll(Collection? c)仅保留集合c中元素是否改变list.retainAll(common)交集操作void clear()清空集合所有元素无list.clear()集合变为空转换和迭代方法方法签名功能描述返回值示例说明Object[] toArray()转换为Object数组Object数组list.toArray()返回新数组T T[] toArray(T[] a)转换为指定类型数组指定类型数组list.toArray(new String[0])类型安全转换IteratorE iterator()返回迭代器Iterator对象list.iterator()用于遍历集合default boolean removeIf(Predicate? super E filter)条件删除是否改变list.removeIf(s - s.length() 3)Java 8default SpliteratorE spliterator()返回分割迭代器Spliterator对象list.spliterator()Java 8并行遍历default StreamE stream()返回顺序流Stream对象list.stream()Java 8流操作default StreamE parallelStream()返回并行流Stream对象list.parallelStream()Java 8并行流操作集合运算方法方法数学运算示意图示例addAll()并集A ∪ BA.addAll(B)retainAll()交集A ∩ BA.retainAll(B)removeAll()差集A - BA.removeAll(B)常见操作示例操作需求代码示例说明遍历集合for (E e : collection) { ... }增强for循环安全遍历并删除iterator.remove()使用迭代器删除转换为数组String[] arr coll.toArray(new String[0])推荐写法批量添加元素coll.addAll(Arrays.asList(A,B,C))初始化集合过滤集合coll.removeIf(e - e.startsWith(A))Java 8集合判空if (!coll.isEmpty()) { ... }优于size() 0注意事项表格方法注意事项推荐做法contains()依赖equals()和hashCode()正确实现这两个方法remove(Object)只删除第一个匹配项使用removeIf()删除所有toArray()无参方法返回Object[]使用带参方法指定类型addAll()可能修改原集合注意并发修改异常clear()不释放元素引用大集合考虑设为nulliterator()遍历时不能修改集合使用迭代器的remove()场景建议理由频繁包含检查使用HashSetO(1)时间复杂度频繁插入删除使用LinkedList首尾操作O(1)随机访问使用ArrayListO(1)索引访问需要排序使用TreeSet自动维护顺序线程安全使用并发集合ConcurrentHashMap等只读操作使用不可变集合Collections.unmodifiableXXX()Collection集合中所包含的方法publicinterfaceCollectionEextendsIterableE{// 基本操作方法intsize();booleanisEmpty();booleancontains(Objecto);booleanadd(Ee);booleanremove(Objecto);// 批量操作booleancontainsAll(Collection?c);booleanaddAll(Collection?extendsEc);booleanremoveAll(Collection?c);booleanretainAll(Collection?c);voidclear();// 数组转换Object[]toArray();TT[]toArray(T[]a);// 迭代器IteratorEiterator();// Java 8 新增方法defaultbooleanremoveIf(Predicate?superEfilter){...}defaultSpliteratorEspliterator(){...}defaultStreamEstream(){...}defaultStreamEparallelStream(){...}}2、Map集合Map映射是将键映射到值的对象。映射不能包含重复的键每个键最多可以映射到一个值。Map 接口层次结构MapK,V (接口) ├── HashMapK,V (最常用) │ └── LinkedHashMapK,V (保持插入顺序) ├── TreeMapK,V (按键排序) ├── HashtableK,V (已过时线程安全) ├── ConcurrentHashMapK,V (并发HashMap) ├── EnumMapK,V (专为枚举设计) └── WeakHashMapK,V (弱引用Map)1. HashMap - 最常用的Map基本使用// 创建HashMapMapString,IntegerstudentScoresnewHashMap();// 添加键值对studentScores.put(张三,85);studentScores.put(李四,92);studentScores.put(王五,78);studentScores.put(张三,90);// 覆盖之前的85// 获取值IntegerscorestudentScores.get(李四);// 92IntegerunknownstudentScores.get(赵六);// null// 判断包含booleanhasZhangstudentScores.containsKey(张三);// truebooleanhasScore100studentScores.containsValue(100);// false// 遍历for(Map.EntryString,Integerentry:studentScores.entrySet()){System.out.println(entry.getKey(): entry.getValue());}// Java 8 遍历studentScores.forEach((name,score)-{System.out.println(name score);});高级操作MapString,IntegermapnewHashMap();// 1. 如果不存在则添加map.putIfAbsent(张三,85);// 添加map.putIfAbsent(张三,90);// 不添加因为已存在// 2. 计算新值map.compute(张三,(key,oldValue)-oldValuenull?100:oldValue10);// 95// 3. 如果不存在则计算map.computeIfAbsent(李四,key-80);// 添加李四:80// 4. 如果存在则计算map.computeIfPresent(李四,(key,value)-value5);// 李四:85// 5. 合并map.merge(张三,10,Integer::sum);// 张三:105 (9510)2. LinkedHashMap - 保持插入顺序的Map// 创建LinkedHashMapMapString,StringaccessOrdernewLinkedHashMap();// 添加数据保持插入顺序accessOrder.put(首页,/home);accessOrder.put(产品,/products);accessOrder.put(关于,/about);accessOrder.put(联系,/contact);System.out.println(插入顺序);accessOrder.forEach((k,v)-System.out.println(k - v));// 输出顺序首页 → 产品 → 关于 → 联系// 实现LRU缓存最近最少使用MapString,StringlruCachenewLinkedHashMap(16,0.75f,true){OverrideprotectedbooleanremoveEldestEntry(Map.Entryeldest){returnsize()3;// 最多缓存3个}};lruCache.put(A,数据A);lruCache.put(B,数据B);lruCache.put(C,数据C);lruCache.get(A);// 访问AA变成最近使用lruCache.put(D,数据D);// B被移除最久未使用System.out.println(LRU缓存lruCache.keySet());// [C, A, D]3. TreeMap - 按键排序的Map// 创建TreeMap默认按键的自然顺序TreeMapString,IntegersortedMapnewTreeMap();sortedMap.put(orange,5);sortedMap.put(apple,3);sortedMap.put(banana,2);sortedMap.put(grape,4);System.out.println(按键排序);sortedMap.forEach((k,v)-System.out.println(k: v));// apple:3 → banana:2 → grape:4 → orange:5// 范围查询StringfirstKeysortedMap.firstKey();// appleStringlastKeysortedMap.lastKey();// orange// 子映射SortedMapString,IntegerheadMapsortedMap.headMap(grape);// apple:3, banana:2SortedMapString,IntegertailMapsortedMap.tailMap(banana);// banana:2, grape:4, orange:5// 导航方法StringlowersortedMap.lowerKey(grape);// banana小于StringfloorsortedMap.floorKey(grape);// grape小于等于StringhighersortedMap.higherKey(grape);// orange大于StringceilingsortedMap.ceilingKey(grape);// grape大于等于4.ConcurrentHashMap - 高并发Map// 创建ConcurrentHashMapConcurrentHashMapString,IntegerconcurrentMapnewConcurrentHashMap();// 线程安全的操作concurrentMap.put(A,1);concurrentMap.putIfAbsent(A,2);// 不会覆盖// 原子操作concurrentMap.compute(A,(k,v)-vnull?1:v1);// 批量操作线程安全concurrentMap.forEach(2,(k,v)-System.out.println(k: v));// 搜索IntegerresultconcurrentMap.search(2,(k,v)-v5?v:null);// 归约intsumconcurrentMap.reduceValues(2,Integer::sum);5.Collections.synchronizedMap// 包装普通Map为线程安全MapString,IntegersyncMapCollections.synchronizedMap(newHashMap());// 使用时要手动同步synchronized(syncMap){for(Map.EntryString,Integerentry:syncMap.entrySet()){// 操作}}6.性能对比表操作HashMapLinkedHashMapTreeMapConcurrentHashMapget()O(1)O(1)O(log n)O(1)put()O(1)O(1)O(log n)O(1)containsKey()O(1)O(1)O(log n)O(1)遍历无序插入顺序按键排序无序线程安全❌❌❌✅