|
C 一、Collection体系全景图Java 连合框架以 Collection 接口为根,主要分为三大分支: List :有序可肖似连合(ArrayList, LinkedList)Set :无序不肖似连合(HashSet, TreeSet)Queue :队伍已矣(PriorityQueue, ArrayDeque)二、List中枢已矣:ArrayListArrayList 基于动态数组已矣,自动扩容机制是其中枢特色: List list = new ArrayList; list.add("Java"); #后端 #金石焕新程 list.add("Python"); // 动态扩容经过:// 1. // 2. // 3. 使用 System.arraycopy 迁徙数据 最好实行 :预估数据量运行化容量可幸免平方扩容 List bigList = new ArrayList(10000); // 指定运行容量 三、Set已矣旨趣与利用1. HashSet去重机制List numbers = Arrays.asList(1,2,2,3,3,3); Set uniqueSet = new HashSet(numbers); // [1,2,3] 2. 哈希算法旨趣HashSet 基于 HashMap 已矣,依赖两个要害商定: equals :判断对象逻辑相称hashCode :计较对象存储位置class Person { String name; @Override public boolean equals(Object o) { return name.equals(((Person)o).name); } @Override public int hashCode { return name.hashCode; } } 四、Map中枢已矣:HashMap1. 基本操作Map map = new HashMap; map.put("Java", 1995); map.put("Python", 1991); // 遍历形貌 for (Map.Entry entry : map.entrySet) { System.out.println(entry.getKey + } 2. 底层结构演进JDK7:数组+链表JDK8+:数组+链表/红黑树(链表长度>8时篡改)3. 线程安全决策// 同步包装 Map safeMap = Collections.synchronizedMap(new HashMap); // 并发容器 ConcurrentHashMap concurrentMap = new ConcurrentHashMap; Set hashSet = new HashSet; Set linkedSet = new LinkedHashSet; Set treeSet = new TreeSet; 六、Guava连合延迟Google Guava 提供开阔的连合器具: // 不成变连合 ImmutableSet colors = ImmutableSet.of("Red", "Green", "Blue"); // 多重连合 Multiset multiset = HashMultiset.create; multiset.add("Java"); multiset.add("Java", 3); // 添加3次 // 双向映射 BiMap biMap = HashBiMap.create; biMap.put("Java", 1); biMap.inverse.get(1); // 复返"Java" 七、实战利用案例1. 部门用户分组排序public static Map> groupByDepartment(List users) { Map> result = new HashMap; users.forEach(user -> { result.computeIfAbsent(user.getDepartment, k -> new ArrayList) .add(user); }); result.values.forEach(list -> list.sort(Comparator.comparingInt(User::getAge)) ); return result; } 2. 字符串去重保持划定public static String removeDuplicates(String input) { Set charSet = new LinkedHashSet; {jz:field.toptypename/}for (char c : input.toCharArray) { charSet.add(c); } StringBuilder sb = new StringBuilder; charSet.forEach(sb::append); return sb.toString; } 3. 字符频率统计public class CharCounter { private final Map counts = new HashMap; public CharCounter(String str) { str.chars.forEach(c -> counts.merge((char)c, 1, Integer::sum) ); } public int commonCharsCount(CharCounter other) { Set intersection = new HashSet(counts.keySet); intersection.retainAll(other.counts.keySet); return intersection.size; } } 追想Java 连合框架提供了丰富的数据结构已矣,相识其中枢旨趣是高效斥地的基础。ArrayList 的动态数组机制安妥立时造访,开云体育HashSet/HashMap 依赖哈希算法已矣高效查找,TreeSet/TreeMap 通过红黑树保证有序性。实战中要稳健:预估容量减少扩容支拨、正确已矣 equals/hashCode 保证连合行动正确、使用 LinkedHashSet 保持插入划定。Guava 库提供了不成变连合等开阔延迟,而 ConcurrentHashMap 贬责了并发场景下的线程安全问题。掌捏这些中枢常识,或者字据需求选拔最好连合类型,编写出高效稳健的 Java 要领。 |


备案号: