java list初始化数据_Java中初始化List的5种方法 /List的2种去重方式
前言
List是java重要的数据结构之一,我们经常接触到的有ArrayList、Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下:
1.构造 List 后使用 List.add 初始化
//方式1-1
List linkedList = new LinkedList<>();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
for (String s : linkedList){
System.out.print(s+" ");
}
System.out.println();
//方式1-3
List linkedList3 = new ArrayList<>();
linkedList3.add("a");
linkedList3.add("b");
linkedList3.add("c");
for (String s : linkedList3){
System.out.print(s+" ");
}
2.使用 {{}} 双括号语法
//方式2
List linkedList4 = new LinkedList(){{
add("1");
add("3");
add("2");
}};
for (String s : linkedList4){
System.out.print(s+" ");
}
外层的{}定义了一个 LinkedList 的匿名内部类。内层的{}的定义了一个实例初始化代码块。 这个代码块在初始化内部类时执行。所以这里相当于定义了一个匿名内部类,并使用add添加元素来初始化。
这种方式有几个缺点:
使用匿名内部类,会有效率上的损失。当然在大多数情况下,这点效率都是可接受的。
静态内部类持有所在外部类的引用。如果需要将 List 返回给到其他地方使用,可能造成内存泄漏。
3.使用 Arrays.asList
//方式3
List ArraysasList = Arrays.asList("a","b","c");
for (String s : ArraysasList){
System.out.print(s+" ");
}
这种方式使用了 java.util.Arrays 的静态方法。写法上比之前的两种都更简洁,也没有构造匿名内部类的效率问题。
但也有几点需要注意:
Arrays.asList 返回的是 Arrays 的静态内部类(静态内部类不持有所在外部类的引用)。
这个内部类继承自 AbstractList,实现了 RandomAccess,内部使用了一个数组来存储元素。但是不支持增删元素。这点需要注意。如果只是使用 Arrays.asList 来初始化常量,那么这点就不算什么问题了。
4. 使用 Stream (JDK8)
List list = Stream.of("a","b","c").collect(Collectors.toList());
使用了 JDK8 的 Stream 来初始化。 单纯初始化 List,使用 Stream 有点大材小用了。
使用 Lists (JDK9)
//方式5
List list1 = Lists.newArrayList("a","b","c");
List的2种去重方式
我们大家都知道,set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单。
当list集合中存储的类型是对象类型的时候,我们就不能简单的只把list集合转换成set集合。
当list集合中存储的是对象时,我们需要在对象的实体类中去重写equals()方法和hashCode()方法,如下:
@Override
public boolean equals(Object arg0) {
People p = (People) arg0;
return name.equals(p.name) && phoneNumber.equals(p.phoneNumber);
}
@Override
public int hashCode() {
String str = name + phoneNumber;
return str.hashCode();
}
equals()
比较两个对象时,首先先去判断两个对象是否具有相同的地址,如果是同一个对象的引用,则直接放回true;如果地址不一样,则证明不是引用同一个对象,接下来就是挨个去比较两个字符串对象的内容是否一致,完全相等返回true,否则false。
hashCode()官方定义:
hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。
hashCode 的常规协定是:
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。
以下情况不是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
List去重的方法很多,可以用for循环或者使用java8新特性stream
java list初始化数据_Java中初始化List的5种方法 /List的2种去重方式相关推荐
- java初始化集合_Java 中初始化 List 集合的 6 种方式!
List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下. 如果想学习Java工程化.高性能及分布式.深入浅出. ...
- java 8位随机数_JAVA中生成指定位数随机数的方法总结
JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 1 public static String getRandom1(intlen) {2 int rs = ...
- java 文件目录是否存在_java中判断文件目录是否存在的方法
java中判断文件目录是否存在的方法 发布时间:2020-06-23 09:34:47 来源:亿速云 阅读:72 作者:Leah 本篇文章展示了java中判断文件目录是否存在的方法具体操作,代码简明扼 ...
- java 可变参数列表_java中可变参数列表的实现方法
我们在对可变参数有一定的认识后,可以引申一下它的使用范围.在数组中也会需要参数的传入,那么结合参数的数量不固定,我们在参数类型上也得到了增加,这就是本篇所要讲的可变参数列表.下面我们就java可变参数 ...
- java声明和初始化数组_Java 中初始化数组
数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...
- java 如何初始化数组_java中初始化数组的三种方式分别是什么
三种初始化方式: 1.静态初始化:创建+赋值 2.动态初始化:先创建再赋值 3.默认初始化:创建之后若不赋值则会被赋对应数据类型的默认值 (视频教程推荐:java视频) 我们来看一下具体代码:publ ...
- java获取response数据_Java中实现Http请求并获取响应数据
前言 在演示的功能代码中使用的请求http地址为:http://timor.tech/api/holiday/year/ 接口说明:获取指定年份或年月份的所有节假日信息.默认返回当前年份的所有信息. ...
- java 游标 查数据_Java中的大量数据查询
问题描述:在通常的三层构架下,客户通过Browser请求Web服务器查询数据库,而查询结果是上千条甚至是上百万条记录,要求查询结果传送到客户端浏览器并分页显示. 考虑因素: 1. Web服务器的资源消 ...
- java sqlserver 插入数据_java中怎样向SQLserver中插入数据
1. 通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别是mssqlserver.jar.msutil.jar和 msbase.jar,可以到微软的网站去下载(://www.m ...
最新文章
- Oracle分页(limit方式的运用)
- 她不理我了,怎么办?
- Linux vi常用指令使用案例汇总
- mysql 关键词相关度排序方法详细示例分析
- eclipse使用maven tomcat插件部署无法关联源代码
- 怎么在表格中转换html格式,图解Excel与Html格式之间的互相转换
- 非模态对话框的销毁及消息的发送顺序
- 吃掉那只青蛙_每日可交付成果–吃青蛙的艺术
- 在Ubuntu上安装Drone持续集成环境
- webbrowser 访问iframe拒绝访问_获取文件夹拒绝访问权限
- TP5模型修改器和读取器
- Fragment事务管理源码分析
- 一、64位windows 安装mysql
- 前端工作中碰到的一些小问题总结
- 粒子滤波 python,粒子滤波器基本原理.ppt.ppt
- html语言中alt,html中alt是什么意思?
- 统计|如何建立单总体方差的置信区间
- 【蓝桥杯每日一练:蹩脚两轮车】
- 苹果认怂了!iPhone 将改用 USB-C 接口
- 泰裤辣!五一烧烤倒计时,还有人没做好攻略吗?