您的位置:首页 > 科技 > 能源 > 机械电子工程网_成都广告公司招聘信息_搜索引擎大全排名_宁波seo推广方式排名

机械电子工程网_成都广告公司招聘信息_搜索引擎大全排名_宁波seo推广方式排名

2024/12/23 11:46:00 来源:https://blog.csdn.net/Fultter/article/details/144518345  浏览:    关键词:机械电子工程网_成都广告公司招聘信息_搜索引擎大全排名_宁波seo推广方式排名
机械电子工程网_成都广告公司招聘信息_搜索引擎大全排名_宁波seo推广方式排名

大家好,今天我们来聊聊Java集合框架中的Set集合、Map集合以及Stream流,并分享一些实用案例。

Set集合:无序、不重复、无索引

Set集合主要包含三种实现类:

  • HashSet:基于哈希表实现,无序、不重复、无索引。元素添加顺序和获取顺序不一致,适合快速查找。
  • LinkedHashSet:基于哈希表和双向链表实现,有序、不重复、无索引。元素添加顺序和获取顺序一致,适合需要记住元素添加顺序的场景。
  • TreeSet:基于红黑树实现,可排序、不重复、无索引。元素按照键的自然顺序或指定比较器排序,适合需要排序的场景。

底层原理

  • HashSet:底层使用哈希表(数组+链表+红黑树)存储元素,通过元素的哈希值确定元素在数组中的位置,从而实现快速查找。
  • LinkedHashSet:在HashSet的基础上,使用双向链表记录元素的添加顺序,从而实现有序性。
  • TreeSet:底层使用红黑树存储元素,红黑树是一种自平衡的二叉搜索树,能够保证元素的有序性,并提供高效的查找、插入和删除操作。

去重机制

Set集合通过哈希值和equals方法来判断元素是否重复。如果希望Set集合认为两个内容相同的对象是重复的,必须重写对象的hashCode和equals方法。

Map集合:键值对集合

Map集合主要包含三种实现类:

  • HashMap:基于哈希表实现,无序、不重复、无索引。键值对无序,键不重复,值可重复,适合快速查找。
  • LinkedHashMap:基于哈希表和双向链表实现,有序、不重复、无索引。键值对有序,键不重复,值可重复,适合需要记住键值对添加顺序的场景。
  • TreeMap:基于红黑树实现,可排序、不重复、无索引。键值对按照键的自然顺序或指定比较器排序,键不重复,值可重复,适合需要排序的场景。

常用方法

  • 添加元素:put(K key, V value)
  • 获取大小:size()
  • 清空集合:clear()
  • 判断是否为空:isEmpty()
  • 根据键获取值:get(Object key)
  • 根据键删除元素:remove(Object key)
  • 判断是否包含键:containsKey(Object key)
  • 判断是否包含值:containsValue(Object value)
  • 获取所有键的集合:keySet()
  • 获取所有值的集合:values()

遍历方式

  • 键找值:通过keySet()方法获取所有键的集合,再遍历键集合,通过get方法获取对应的值。
  • 键值对:通过entrySet()方法获取所有键值对的集合,再遍历键值对集合,通过getKey()和getValue()方法获取键和值。
  • Lambda表达式:使用forEach方法结合Lambda表达式进行遍历。

Stream流:简化集合、数组操作

Stream流是JDK 8新增的API,可以用于操作集合或数组的数据。它结合了Lambda表达式,功能强大,性能高效,代码简洁,可读性好。

使用步骤

  1. 获取Stream流
  2. 调用Stream流的方法对数据进行处理
  3. 获取处理的结果

常用方法

  • 获取Stream流:stream(), Arrays.stream(), Stream.of()
  • 中间方法:filter(), sorted(), limit(), skip(), distinct(), map(), concat()
  • 终结方法:forEach(), count(), max(), min(), collect()

收集Stream流

Stream流可以将操作后的结果收集到集合或数组中,例如:

  • collect(Collectors.toList())
  • collect(Collectors.toSet())
  • collect(Collectors.toMap())

Set集合示例

HashSet去重
import java.util.HashSet;public class HashSetExample {public static void main(String[] args) {HashSet<Integer> set = new HashSet<>();set.add(1);set.add(2);set.add(3);set.add(2); // 重复元素,不会添加到集合中set.add(4);System.out.println(set); // 输出: [1, 2, 3, 4]}
}
TreeSet排序
import java.util.TreeSet;public class TreeSetExample {public static void main(String[] args) {TreeSet<String> set = new TreeSet<>();set.add("banana");set.add("apple");set.add("cherry");System.out.println(set); // 输出: [apple, banana, cherry]}
}
LinkedHashSet有序
import java.util.LinkedHashSet;public class LinkedHashSetExample {public static void main(String[] args) {LinkedHashSet<String> set = new LinkedHashSet<>();set.add("banana");set.add("apple");set.add("cherry");System.out.println(set); // 输出: [banana, apple, cherry]}
}

Map集合示例

HashMap存储键值对
import java.util.HashMap;public class HashMapExample {public static void main(String[] args) {HashMap<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);System.out.println(map); // 输出: {apple=1, banana=2, cherry=3}}
}
TreeMap排序
import java.util.TreeMap;public class TreeMapExample {public static void main(String[] args) {TreeMap<String, Integer> map = new TreeMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);System.out.println(map); // 输出: {apple=1, banana=2, cherry=3}}
}
LinkedHashMap有序
import java.util.LinkedHashMap;public class LinkedHashMapExample {public static void main(String[] args) {LinkedHashMap<String, Integer> map = new LinkedHashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);System.out.println(map); // 输出: {apple=1, banana=2, cherry=3}}
}

Stream流示例

过滤、排序、去重
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class StreamExample {public static void main(String[] args) {List<String> list = Arrays.asList("apple", "banana", "cherry", "apple", "banana");List<String> result = list.stream().filter(s -> s.startsWith("a")) // 过滤以"a"开头的元素.sorted() // 排序.distinct() // 去重.collect(Collectors.toList()); // 收集结果System.out.println(result); // 输出: [apple]}
}
Map的键值对遍历
import java.util.HashMap;
import java.util.Map;public class MapStreamExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);map.entrySet().stream().forEach(entry -> System.out.println(entry.getKey() + " = " + entry.getValue()));}
}

这些代码示例涵盖了Set集合、Map集合以及Stream流的基本操作,希望对你有所帮助!

版权声明:

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

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