从头认识java-15.5 使用LinkedHashSet须要注意的地方
再接着上一个章节。我们来聊一下使用LinkedHashSet须要注意的地方。
LinkedHashSet特点:
(1)元素是有顺序的
(2)元素是不反复的
(3)底层数据结构是依照链表的结构存储的
(4)须要又一次hashcode和equals方法
样例:(我们再次改动上一章节的代码)
package com.ray.ch15; import java.lang.reflect.InvocationTargetException;
import java.util.LinkedHashSet;
import java.util.Set; public class Test<T> {
public static <T> Set<T> fill(Set<T> set, Class<T> type)
throws InstantiationException, IllegalAccessException,
IllegalArgumentException, SecurityException,
InvocationTargetException, NoSuchMethodException {
for (int i = 0; i < 10; i++) {
set.add(type.getConstructor(int.class).newInstance(i));
}
return set;
} public static <T> void test(Set<T> set, Class<T> type)
throws IllegalArgumentException, SecurityException,
InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
fill(set, type);
fill(set, type);
fill(set, type);
System.out.println(set);
} public static void main(String[] args) throws IllegalArgumentException,
SecurityException, InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
test(new LinkedHashSet<TreeType>(), TreeType.class);
test(new LinkedHashSet<SetType>(), SetType.class);
test(new LinkedHashSet<HashType>(), HashType.class);
}
} class SetType {
private int id = 0; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public SetType(int i) {
id = i;
} @Override
public String toString() {
return id + "";
} @Override
public boolean equals(Object obj) {
return obj instanceof SetType && (id == ((SetType) obj).id);
}
} class HashType extends SetType { public HashType(int i) {
super(i);
} @Override
public int hashCode() {
return getId();
}
} class TreeType extends HashType implements Comparable<TreeType> {
public TreeType(int i) {
super(i);
} @Override
public int compareTo(TreeType o) {
if (o.getId() > getId()) {// 排序
return -1;
} else {
if (o.getId() == getId()) {// 去重
return 0;
} else {
return 1;
}
}
}
}
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:在TreeType里面的Comparable接口是没什么用的。
总结:我们这一章节简单展示了使用LinkedHashSet须要注意的地方。
这一章节就到这里,谢谢。
-----------------------------------
从头认识java-15.5 使用LinkedHashSet须要注意的地方的更多相关文章
- 从头认识java-15.3 使用HashSet须要注意的地方
这一章节我们来讨论一下使用Set的各种实现须要注意的地方. Set接口的经常使用实现类有:HashSet.TreeSet,LinkedHashSet 1.HashSet 大家对于HashSet的印象都 ...
- JDK 15 JAVA 15的新特性展望
目录 JEP 371: Hidden Classes JEP 372: 删除 Nashorn JavaScript Engine JEP 377: 新的垃圾回收器ZGC正式上线了 JEP 378: T ...
- Java 15 正式发布, 14 个新特性,刷新你的认知!!
JDK 15 2020/09/15 如期而至! 这个时间牛逼啊,和苹果发布会同天? OracleJDK 15 发布地址: https://www.oracle.com/java/technologie ...
- linux(centos8):安装java jdk 15 (java 15)
一,下载jdk15 官方网站: https://www.oracle.com/java/ 下载页面: https://www.oracle.com/cn/java/technologies/javas ...
- Java 中的 3 个双引号是什么语法?Java 15 刷新你的认知!
Java 中的 3 个双引号 """ 是什么语法? 这是 Java 15 新出的,刷新你的认知! 一.前言 在 Java 15 的推出的时候,Text Blocks 正式 ...
- 由Java 15废弃偏向锁,谈谈Java Synchronized 的锁机制
Java 15 废弃偏向锁 JDK 15已经在2020年9月15日发布,详情见 JDK 15 官方计划.其中有一项更新是废弃偏向锁,官方的详细说明在:JEP 374: Disable and Depr ...
- 超详细 Java 15 新功能介绍
点赞再看,动力无限.微信搜「程序猿阿朗 」,认认真真写文章. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. Java 15 在 2 ...
- Java 15 新特性:文本块
大家好,我是DD,今天继续来学点Java的新特性! 假设有这样一个场景,我们需要做一个工具.用来自动生成项目文档,文档可以通过浏览器查看,所以最后产出物肯定是一堆html文件.为了让这些html文件更 ...
- Java 15 新特性:隐藏类
什么是隐藏类 隐藏类,是一种不能被其他类直接使用的类.引入隐藏类的主要目的是给框架来使用,使得框架可以在运行时生成类,并通过反射间接使用它们.可能有点抽象,不要紧,下面我们通过一个例子来直观的认识它! ...
随机推荐
- \include\configs\mx6q_sabresd.h
/* * Copyright (C) 2012 Freescale Semiconductor, Inc. * * Configuration settings for the MX6Q Sabre ...
- Web自动化Selenium2环境配置中Selenium IDE的安装
下载的firefox32.0的版本,但是在附件组件中只有selenuim IDE button,本以为这个就是selenium IDE插件,自以为是的后果就是把自己坑了.并且像一些selenium I ...
- Untiy CurvedUI 的使用的bug修正
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51996538 作者:car ...
- android sdk 下载
不知道是因为最近kaihui还是怎么的,打开android sdk官方网站特别的慢,想下载最新版本的platform几乎变成不可能完成的任务,不知道为什么Google不像Apache那样在各国设立镜像 ...
- 关于Linux下的环境变量
一.交互式shell和非交互式shell 要搞清bashrc与profile的区别,首先要弄明白什么是交互式shell和非交互式shell,什么是login shell 和non-login shel ...
- cf950e Data Center Maintenance
若推迟 \(u\) 必推迟 \(v\),则连边 <\(u,v\)>. 求强联通分量后缩点,答案显然是出度为 \(0\) 且 size 最小的 scc. #include <iostr ...
- Linux基础命令详解-2
本篇详解的命令有以下30个 1.rmdir 功能:删除一个空目录 2.telnet 功能:使用telnet协议连接到主机的指定端口 3.vim 功能:编辑器之神 vim三种模式的功能及其转换 ...
- Convolution Fundamental II
Practical Advice Using Open-Source Implementation We have learned a lot of NNs and ConvNets architec ...
- 【Kubernetes】离线业务:Job与CronJob
Deployment.StatefulSet和DaemonSet这三个编排概念编排的对象主要都是在线业务(Long Running Task,这些应用一旦运行起来,除非出错或者停止,它的容器进程会一直 ...
- 对拍程序(Win)
代码如下: @echo off :again rand.exe echo "rand finish" asd.exe echo "1.exe finish" 未 ...