Set和List如何转换

★ 数组转Collection

使用Apache Jakarta Commons Collections:

  1. import org.apache.commons.collections.CollectionUtils;   

  2. String[] strArray = {"aaa", "bbb", "ccc"};   

  3. List strList = new ArrayList();   

  4. Set strSet = new HashSet();   

  5. CollectionUtils.addAll(strList, strArray);   

  6. CollectionUtils.addAll(strSet, strArray);  

CollectionUtils.addAll()方法的实现很简单,只是循环使用了Collection的add()方法而已。

如果只是想将数组转换成List,可以用JDK中的java.util.Arrays类:

  1. import java.util.Arrays;   

  2. String[] strArray = {"aaa", "bbb", "ccc"};   

  3. List strList = Arrays.asList(strArray);  

不过Arrays.asList()方法返回的List不能add对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList。

★ Collection转数组

直接使用Collection的toArray()方法,该方法有两个重载版本:

  1. Object[] toArray();   

  2. T[] toArray(T[] a);  

★ Map转Collection

直接使用Map的values()方法。

★ List和Set转换

List list = new ArrayList(new Hashset());// Fixed-size list 
List list = Arrays.asList(array);// Growable 
list list = new LinkedList(Arrays.asList(array));// Duplicate elements are discarded 
Set set = new HashSet(Arrays.asList(array));

//=============================================================//

--------------------------------------------------------------- 

List list = new ArrayList(new Hashset()); 
Set set = new HashSet(list); 
--------------------------------------------------------------- 

// Fixed-size list 
     List list = Arrays.asList(array); 
     
     // Growable list 
     list = new LinkedList(Arrays.asList(array)); 
     
     // Duplicate elements are discarded 
     Set set = new HashSet(Arrays.asList(array));

//========================================================//

import java.util.*; 

public class test3 { 
public test3() { 

public static void main(String[] args){ 
String xx = new String("1"); 
String yy = new String("2"); 
List list = new ArrayList(); 
list.add(xx); 
Set set = new HashSet(list); 
System.out.println(set.contains(xx)); 
System.out.println(set.contains(yy)); 

—————————————————————————————————— 
true 
false

//================================================================//

解释一下 

Object的hashCode返回值基本上是对象的内存地址 

Object的equals方法判断两个Object对象是否“相等”的依据其实是两个对象是否“相同” 

所以,如果obj1 和 obj2 都是Object实例,那么 obj1.equals(obj2) 和 obj1 == obj2 是等价的 

equals和hashCode这两个方法的关系是: 

如果两个对象equals返回true,那么它们的hashCode必须返回相同的integer值。反之,则不做要求,但建议是:如果它们返回相同的hashCode,那么equals应该返回true。 

因为上面的原因,如果某个类覆盖了Object的equals方法,那它就必须覆盖hashCode方法,以满足上述要求。 

对于自己定义的类,是否要覆盖这些方法,完全取决于自己的需要,如果需要放宽两个对象相等的条件,就需要覆盖。如果不需要,就用Object的实现好了,完全没有问题。 

例如,对于Integer类,它需要将两个Integer相等的条件放宽到只要它们包含的数值相等,两个对象就相等,它就会覆盖equals方法,同时,它必须覆盖hashCode方法,返回值很简单,就是它包含的整型值。 

再例如,Thread类就没有覆盖这两个方法,它作为Object的直接继承,写Thread类的人认为继承使用Ojbect的这两个方法是合适的,他就不会去覆盖。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )