要进行数据去重,我们首先想到的是新建一个集合,然后循环原来的集合,每次循环判断原集合中的循环项,如果当前循环的数据,没有在新集合中存在就插入,已经存在了就舍弃,这样当循环执行完,我们就得到了一个没有重复元素的集合了,实现代码如下:
public class ListController {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(5);
add(4);
add(5);
add(3);
add(7);
add(8);
add(9);
add(8);
add(5);
add(4);
add(5);
add(6);
}};
System.out.println("原集合:" + list);
ListMethod(list);
}
/**
* 使用迭代器去重
*
* @param list
*/
public static void ListMethod(List<Integer> list) {
// 新集合
List<Integer> newList = new ArrayList<>(list.size());
list.forEach(i -> {
if (!newList.contains(i)) {
// 如果新集合中不存在则插入
newList.add(i);
}
});
System.out.println("去重集合:" + newList);
}
}
以上程序执行的结果,如下所示:
此方法的优点的:理解起来比较简单,并且最终得到的集合也是有序的,这里的有序指的是新集合的排列顺序和原集合的顺序是一致的;但缺点是实现代码有点多,不够简洁优雅。
自定义 List 去重,除了上面的新建集合之外,我们也可以使用迭代器循环判断每一项数据,如果当前循环的数据,在集合中存在两份或两份以上,就将当前的元素删除掉,这样循环完之后,也可以得到一个没有重复数据的集合,实现代码如下:
public class ListController {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(5);
add(4);
add(5);
add(3);
add(7);
add(8);
add(9);
add(8);
add(5);
add(4);
add(5);
add(6);
}};
System.out.println("原集合:" + list);
ListMethod(list);
}
/**
* 使用迭代器去重
*
* @param list
*/
public static void ListMethod(List<Integer> list) {
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
// 获取循环的值
Integer item = iterator.next();
// 如果存在两个相同的值
if (list.indexOf(item) != list.lastIndexOf(item)) {
// 移除最后那个相同的值
iterator.remove();
}
}
System.out.println("去重集合:" + list);
}
}
以上程序执行的结果,如下所示:
此方法的实现比上一种方法的实现代码要少一些,并且不需要新建集合,但此方法得到的新集合是无序的,也就是新集合的排列顺序和原集合不一致,因此也不是最优的解决方案。
我们知道 HashSet 天生具备“去重”的特性,那我们只需要将 List 集合转换成 HashSet 集合就可以了,实现代码如下:
public class ListController {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(5);
add(4);
add(5);
add(3);
add(7);
add(8);
add(9);
add(8);
add(5);
add(4);
add(5);
add(6);
}};
System.out.println("原集合:" + list);
ListMethod(list);
}
/**
* 使用 HashSet 去重
* @param list
*/
public static void ListMethod(List<Integer> list) {
HashSet<Integer> set = new HashSet<>(list);
System.out.println("去重集合:" + set);
}
}
以上程序执行的结果,如下所示:
此方法的实现代码较为简洁,但缺点是 HashSet 会自动排序,这样新集合的数据排序就和原集合不一致了,如果对集合的顺序有要求,那么此方法也不能满足当前需求。
既然 HashSet 会自动排序不能满足需求,那就使用 LinkedHashSet,它既能去重又能保证集合的顺序,实现代码如下:
public class ListController {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(5);
add(4);
add(5);
add(3);
add(7);
add(8);
add(9);
add(8);
add(5);
add(4);
add(5);
add(6);
}};
System.out.println("原集合:" + list);
ListMethod(list);
}
/**
* 使用 LinkedHashSet 去重
* @param list
*/
public static void ListMethod(List<Integer> list) {
LinkedHashSet<Integer> set = new LinkedHashSet<>(list);
System.out.println("去重集合:" + set);
}
}
以上程序执行的结果,如下所示:
从上述代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新集合与原集合顺序保持一致的实现方法,是我们可以考虑使用的一种去重方法。
除了以上的 Set 集合之外,我们还可以使用 TreeSet 集合来实现去重功能,实现代码如下:
public class ListController {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(5);
add(4);
add(5);
add(3);
add(7);
add(8);
add(9);
add(8);
add(5);
add(4);
add(5);
add(6);
}};
System.out.println("原集合:" + list);
ListMethod(list);
}
/**
* 使用 TreeSet 去重(无序)
* @param list
*/
public static void ListMethod(List<Integer> list) {
TreeSet<Integer> set = new TreeSet<>(list);
System.out.println("去重集合:" + set);
}
}
以上程序执行的结果,如下所示:
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序,因此也不能满足我们的需求。
JDK 8 为我们带来了一个非常实用的方法 Stream,使用它可以实现很多功能,比如下面的去重功能:
public class ListController {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>() {
{
add(1);
add(2);
add(5);
add(4);
add(5);
add(3);
add(7);
add(8);
add(9);
add(8);
add(5);
add(4);
add(5);
add(6);
}};
System.out.println("原集合:" + list);
ListMethod(list);
}
/**
* 使用 Stream 去重
* @param list
*/
public static void ListMethod(List<Integer> list) {
list = list.stream().distinct().collect(Collectors.toList());
System.out.println("去重集合:" + list);
}
}
以上程序执行的结果,如下所示:
Stream 实现去重功能和其他方法不同的是,它不用新创建集合,使用自身接收一个去重的结果就可以了,并且实现代码也很简洁,并且去重后的集合顺序也和原集合的顺序保持一致,是我们最优先考虑的去重方法。
文章浏览阅读1.2w次。以联想拯救者y7000p为例,键盘失灵是系统有问题,联想笔记本都带着一键还原功能,只要没有重新安装过系统。一键还原按钮在笔记本左侧或者右侧,是一个很细的孔,进行还原系统即可。键盘(Keyboard)是用于操作设备运行的一种指令和数据输入装置,也指经过系统安排操作一台机器或设备的一组功能键。键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令..._联想拯救者y7000 2022款键盘失灵
文章浏览阅读4.7k次。Welcome to my blog!贤胜足球分析系统 v2.4.4 大小球测试版 软件大小:29823 KB软件语言:简体中文软件类别:国产软件 / 免费版 / 彩票工具应用平台:Win9x/NT/2000/XP/2003界面预览:无插件情况: 投诉更新时间:2007-02-01 14:00:24下载次数:1231推荐等级:联 系 人:haiyuwebc_足球分析系统
文章浏览阅读8.5k次,点赞6次,收藏5次。有用的话记得回过头请给本文点个赞,感谢您的支持!LinAlgError: SVD did not converge in Linear Least Squares说明在拟合时,y值里存在nan值,ps:虽然你的原始文件中可能没有nan值,但是可能存在数值类型不是float型或完全的整型的数据,导致读出来的数据中有nan值,我就遇到一个,如图,读出来有一个是nan值,原始文件中是一个float型数字。解决方法,去掉该数据。y = lsit(y)nan_index = []for i in r_svd did not converge in linear least squares
文章浏览阅读127次。今天,看了同学写的HTML代码很糟糕.就自己重写了一下.了解了一些HTML.CSS知识.现记录在这里.先给大家一个比较好的CSS教程网站:http://www.w3school.com.cn/css/index.aspCSS 概述CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加..._cgi 生成含有css的html文件
文章浏览阅读2k次,点赞3次,收藏11次。- MIB通过BCH传输信道和PBCH物理信道传输;- QPSK调制;- 它包含了解码 *SystemInformationBlockType1 (SIB1)* 所需的必要参数;- 它的传输周期为80毫秒,在这80毫秒内进行重复传输;- 它在OFDM 的符号1、2、3上传输;- 根据TS 38.211,它在符号1和3上使用0~239的子载波号,而在符号2上,使用0\~47的子载波号和192\~239的子载波号;_mib rlc
文章浏览阅读3.8w次。今天在对原来的项目进行运行时,突然程序报出java.sql.SQLException: Listener refused the connection with the following error:ORA-12519, TNS:no appropriate service handler found 这个错误,之前一直运行都是好好的,于是乎,就各种查找相关的解决方法,网上查找到的原_oracle.net.ns.netexception: listener refused the connection with the followi
文章浏览阅读956次。465efd10-c0e0-4966-be32-a20b213a2dbc 为 ha1 的uuid,可通过 ovn-nbctl ha-chassis-group-list 查看。#问题网关节点设置的ip不通,是因为路由器的网关接口mac与外部逻辑交换机的路由器端口mac地址不符。#==创建ovs端口=========================#==创建外部网络网桥================#经排查是未设置ls2交换机上的路由器端口的mac地址。#设置地址,必须和 lr1-ls1 的一致。_ovn lb配置在router上测试
文章浏览阅读1.1k次,点赞16次,收藏9次。物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。物理层主要任务:确定与传输媒体接口有关的一些特性 =》定义标准。通信的目的是传送消息(消息:语音、文字、图像、视频等)。说明:数据通信指在不同计算机之间传输表示信息的二进制数0、1序列的过程。数据data:传送信息的实体,通常是有意义的符号序列。信号:数据的电气/电磁的变现,是数据在传输过程中的存在形式。信源:产生和发送数据的源头。信宿: 接收数据的终点。信道:信号的传输媒介。一般用来表示向某一个方向传送信息的介质,因此一条通信
文章浏览阅读1k次。1.打开 VS 创建一个 安装项目,如下图:创建成功后,如下图: 2.安装项目的 文件夹介绍及其使用A.应用程序文件夹 : 主要功能,存储需要打包,执行程序,以及资源文件。B.用户的“程序”菜单 :主要功能,左下角windows 快捷方式 存放的地方 C.用户桌面 : 主要功能,用户机器 桌面的快捷方式 存放的地方 3.操作步骤1.配置应用程序文件夹 2.配置应用程序菜单A.添加文件的方法_vs winform 项目打包 怎么把python打进去
文章浏览阅读2.4k次,点赞2次,收藏30次。FPGA面试真题解析1、1、 十进制46.25对应的二进制表达式为( )。(硬件逻辑实习岗)A 101110.11 B 101101.01 C 101110.1 D 101110.01解析:这个问题看上去很简单,那是因为我们平时可以打开电脑上的计算器,然后用程序员功能立刻就能出结果,但是笔试的时候我们并不能使用这种“作弊“的功能,所以还是要会手算。可能很多同学数电是大一大二时学习的,很久没有接触过这么基础的问题了,那就让我们一起来回忆下吧。首先这个题_fpga二进制编码为啥用较多组合逻辑
文章浏览阅读1k次。SELECT语句 SELECT [ ALL | DISTINCT { * | expression | column1_name [ , column2_name ] [ , … ] }FROM { table1_name | ( subquery ) } [ alias ][ , { table2_name | ( subquery ) } [ alias ] , … ][ _oracle删除语句带子查询 原理
文章浏览阅读7k次,点赞4次,收藏16次。插入——端子——点击端子。选择端子,没别插入到图纸中;勾选多层端子,输入端子层数量;将X5和X6连个端子合并为一个端子排;不同行/列,生成多个端子排;选中端子,可以拖放插入,也可以单个放置;默认端子如果不是想插入的端子,按退格键选择;设备——端子——导航器。或者使用3连接点的端子和4连接点的端子组合;通常选择带鞍型跳线的端子,2个连接点;双击X6——将完整设备标识符修改为X5:2;X5端子排的第二个;已使用端子和未使用端子,端子前的购物车符号不同;如果放置在同一列/行,自动生成为同一个端子排;_eplan端子排