当前位置: 首页 > wzjs >正文

深圳市建设交易中心网站首页网站seo做点提升流量

深圳市建设交易中心网站首页,网站seo做点提升流量,万网的网站怎么建设,北京网站报价Java Set实现类面试题 HashSet Q1: HashSet的实现原理是什么? HashSet是基于HashMap实现的,使用HashMap的key来存储元素,value统一使用一个Object对象。 public class HashSetPrincipleExample {// 模拟HashSet的基本实现public class Si…

Java Set实现类面试题

HashSet

Q1: HashSet的实现原理是什么?

HashSet是基于HashMap实现的,使用HashMap的key来存储元素,value统一使用一个Object对象。

public class HashSetPrincipleExample {// 模拟HashSet的基本实现public class SimpleHashSet<E> {private static final Object PRESENT = new Object();private HashMap<E, Object> map;public SimpleHashSet() {map = new HashMap<>();}public boolean add(E e) {return map.put(e, PRESENT) == null;}public boolean remove(Object o) {return map.remove(o) == PRESENT;}public boolean contains(Object o) {return map.containsKey(o);}public int size() {return map.size();}}
}

Q2: HashSet如何保证元素不重复?

public class HashSetDuplicationExample {public static class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// 错误的hashCode实现public int badHashCode() {return 1; // 所有对象都返回相同的hash值}// 正确的hashCode实现@Overridepublic int hashCode() {return Objects.hash(name, age);}// 正确的equals实现@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (!(obj instanceof Person)) return false;Person other = (Person) obj;return age == other.age && Objects.equals(name, other.name);}}public void demonstrateDuplication() {Set<Person> set = new HashSet<>();set.add(new Person("Tom", 20));set.add(new Person("Tom", 20)); // 不会被添加,因为equals返回trueSystem.out.println("Set size: " + set.size()); // 输出1}
}

TreeSet

Q3: TreeSet的实现原理是什么?

TreeSet是基于TreeMap实现的,它是一个有序集合。

public class TreeSetPrincipleExample {// 1. 使用自然排序public void naturalOrdering() {TreeSet<String> set = new TreeSet<>();set.add("C");set.add("A");set.add("B");System.out.println(set); // 输出 [A, B, C]}// 2. 使用自定义排序public void customOrdering() {TreeSet<Person> set = new TreeSet<>((p1, p2) -> {int ageCompare = Integer.compare(p1.getAge(), p2.getAge());if (ageCompare != 0) return ageCompare;return p1.getName().compareTo(p2.getName());});set.add(new Person("Tom", 20));set.add(new Person("Jerry", 18));set.add(new Person("Bob", 20));}// 3. 实现Comparable接口public static class ComparablePerson implements Comparable<ComparablePerson> {private String name;private int age;@Overridepublic int compareTo(ComparablePerson other) {int ageCompare = Integer.compare(this.age, other.age);if (ageCompare != 0) return ageCompare;return this.name.compareTo(other.name);}}
}

LinkedHashSet

Q4: LinkedHashSet的特点是什么?

LinkedHashSet是HashSet的子类,它使用LinkedHashMap来存储元素,维护了元素的插入顺序。

public class LinkedHashSetExample {public void demonstrateOrdering() {// 1. HashSet不保证顺序Set<String> hashSet = new HashSet<>();hashSet.add("C");hashSet.add("A");hashSet.add("B");System.out.println("HashSet: " + hashSet); // 顺序不确定// 2. LinkedHashSet保持插入顺序Set<String> linkedHashSet = new LinkedHashSet<>();linkedHashSet.add("C");linkedHashSet.add("A");linkedHashSet.add("B");System.out.println("LinkedHashSet: " + linkedHashSet); // 输出 [C, A, B]// 3. TreeSet按照自然顺序Set<String> treeSet = new TreeSet<>();treeSet.add("C");treeSet.add("A");treeSet.add("B");System.out.println("TreeSet: " + treeSet); // 输出 [A, B, C]}
}

性能比较

Q5: 不同Set实现类的性能对比?

public class SetPerformanceComparison {public void comparePerformance() {int n = 100000;// 1. 添加性能long start = System.currentTimeMillis();Set<Integer> hashSet = new HashSet<>();for (int i = 0; i < n; i++) {hashSet.add(i);}System.out.println("HashSet添加耗时:" + (System.currentTimeMillis() - start));start = System.currentTimeMillis();Set<Integer> treeSet = new TreeSet<>();for (int i = 0; i < n; i++) {treeSet.add(i);}System.out.println("TreeSet添加耗时:" + (System.currentTimeMillis() - start));start = System.currentTimeMillis();Set<Integer> linkedHashSet = new LinkedHashSet<>();for (int i = 0; i < n; i++) {linkedHashSet.add(i);}System.out.println("LinkedHashSet添加耗时:" + (System.currentTimeMillis() - start));// 2. 查找性能start = System.currentTimeMillis();for (int i = 0; i < n; i++) {hashSet.contains(i);}System.out.println("HashSet查找耗时:" + (System.currentTimeMillis() - start));start = System.currentTimeMillis();for (int i = 0; i < n; i++) {treeSet.contains(i);}System.out.println("TreeSet查找耗时:" + (System.currentTimeMillis() - start));}
}

Q6: 如何选择合适的Set实现类?

public class SetSelectionExample {public void demonstrateUsage() {// 1. 需要最高性能,不关心顺序Set<String> hashSet = new HashSet<>();// 2. 需要排序Set<String> treeSet = new TreeSet<>();// 3. 需要记住插入顺序Set<String> linkedHashSet = new LinkedHashSet<>();// 4. 自定义排序示例Set<Person> customSortedSet = new TreeSet<>((p1, p2) -> {// 按年龄排序,年龄相同按姓名排序int ageCompare = Integer.compare(p1.getAge(), p2.getAge());if (ageCompare != 0) return ageCompare;return p1.getName().compareTo(p2.getName());});// 5. 需要线程安全Set<String> synchronizedSet = Collections.synchronizedSet(new HashSet<>());// 6. 并发环境下的有序SetSet<String> concurrentSkipListSet = new ConcurrentSkipListSet<>();}// 使用场景示例public void usageScenarios() {// 1. 去重场景Set<String> uniqueEmails = new HashSet<>();uniqueEmails.add("user@example.com");uniqueEmails.add("user@example.com"); // 重复邮箱不会被添加// 2. 排序场景Set<Integer> sortedNumbers = new TreeSet<>();sortedNumbers.add(3);sortedNumbers.add(1);sortedNumbers.add(2);// 遍历时自动排序// 3. 记录访问顺序场景Set<String> pageViews = new LinkedHashSet<>();pageViews.add("/home");pageViews.add("/products");pageViews.add("/about");// 保持用户访问页面的顺序}
}

面试关键点

  1. 理解不同Set实现类的底层原理
  2. 掌握HashSet的去重机制
  3. 了解TreeSet的排序原理
  4. 熟悉LinkedHashSet的特点
  5. 掌握Set的选择原则
  6. 注意性能和线程安全
  7. 理解equals和hashCode的重要性
  8. 掌握自定义排序的实现方式
http://www.dtcms.com/wzjs/538919.html

相关文章:

  • 高端定制网站建设高青云速网站建设
  • wordpress电影站开发网站备案号信息查询
  • 黄冈网站建设哪家便宜阳泉购物网站开发设计
  • 图片分享功能网站开发wordpress会员无法注册
  • 欧美风网站深圳教育科技网站建设
  • 模板建站哪里有原创服装设计师
  • 一网网站制作平台什么网站做视频给钱
  • 品牌网站建设可信大蝌蚪wordpress简洁淘宝客免费主题
  • 大学生网站开发与设计实训报告做教育的有哪些网站
  • wordpress码农主题烟台网站排名优化公司
  • 做网站莱芜WordPress自动截取
  • 软件网站模板wordpress關閉
  • 台州免费建站要求维护公司做网站整改的函
  • 北京网络公司网站做网页到哪个网站找素材
  • 产品包装设计素材网站制作网站的详细步骤
  • 常州市网站优化莱芜区宣传部网站
  • 廊坊中小企业网站制作济南商城网站制作
  • 南京网站建设索q.479185700北京互联网公司聚集地
  • 池州家居网站建设怎么样宁波网站排名优化公司
  • 小企业网站建设怎么做好网站服务器建立
  • 室内设计师第一网站做自己网站彩票
  • 网站设计基本要素dw个人网站模板下载
  • 电子商务网站建设书2免费做网站
  • 可以做旅行计划的网站删除wordpress缓存文件
  • 驻马店做网站多少钱dede网站安全设置
  • 百度上面如何做网站门户网站广告的特点有
  • 网站开发如何处理兼容性问题南京网站关键词优化咨询
  • 创意字体设计网站常州网约车驾驶员资格证网上报名
  • 自己怎么做网站赚钱吗wordpress5.0中文
  • 网站开发工资有多少企业品牌推广营销方案