如何在Java中将列表转换为Set
在这篇文章中,我们将看到如何在Java中将List转换为Set。 数组列表 至 哈希集.
由于HashSet不允许重复,因此当您将ArrayList转换为HashSet时,所有重复项都将被丢弃。
您可以简单地使用HashSet的构造函数将ArrayList转换为HashSet。
1 2 3 |
哈希集 组 = 新 哈希集( 清单 ); |
这是简单的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
包 组织 .Arpit . 爪哇 2blog; 进口 爪哇 . 实用程序 .数组列表; 进口 爪哇 . 实用程序 .哈希集; 进口 爪哇 . 实用程序 . 清单 ; 进口 爪哇 . 实用程序 . 组 ; 上市 类 清单 ToSetMain { 上市 静态的 虚空 主要 (串 args []) { 清单 <串> 国家列表= 新 数组列表<>(); 国家列表. 加 (“印度”); 国家列表. 加 (“中国”); 国家列表. 加 (“不丹”); 国家列表. 加 (“尼泊尔”); 国家列表. 加 (“印度”); 系统. 出 .打印(“ == ====================”); 系统. 出 .打印(“国家名单:”); 系统. 出 .打印(“ == ====================”); 对于 (串 国家:国家列表) { 系统. 出 .打印(国家); } //将列表转换为set 组 <串> 国家Set= 新 哈希集<串>(国家列表); 系统. 出 .打印(“ == ====================”); 系统. 出 .打印(“国家组:”); 系统. 出 .打印(“ == ====================”); 对于 (串 国家:国家Set) { 系统. 出 .打印(国家); } } } |
当您在程序上方运行时,将获得以下输出
国家名单:
== =====================
印度
中国
不丹
尼泊尔
印度
== =====================
国家集:
== =====================
不丹
中国
尼泊尔
印度
爪哇 8设置示例列表
您可以使用Java 8流 API将列表转换为集合。
1 2 3 4 |
//将列表转换为Java 8中的设置 组 <串> 国家Set=国家列表.流().收藏(收藏家. 至 Collection(哈希集 :: 新 )); |
只需将ListToSetMain.java中的第29行更改为上方,您将获得相同的输出。
自定义对象时要设置的列表
将自定义对象列表转换为Set时,需要非常小心。
让’通过一个简单的例子可以理解:
创建一个名为的类"Country"。我们将把此类的对象放入列表,然后将其转换为列表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
包 组织 .Arpit . 爪哇 2blog; 上市 类 国家 { 串 名称 ; 长 人口; 上市 国家(串 名称 , 长 人口) { 超 (); 这个 . 名称 = 名称 ; 这个 .人口 = 人口; } 上市 串 getName() { 返回 名称 ; } 上市 虚空 组 Name(串 名称 ) { 这个 . 名称 = 名称 ; } 上市 长 getPopulation() { 返回 人口; } 上市 虚空 组 Population( 长 人口) { 这个 .人口 = 人口; } @覆写 上市 串 至 String() { 返回 "国家 [name=" + 名称 + “,人口=” + 人口 + “]” ; } } |
创建一个名为的类ListToSetCustomObjectMain as below:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
包 组织 .Arpit . 爪哇 2blog; 进口 爪哇 . 实用程序 .数组列表; 进口 爪哇 . 实用程序 .哈希集; 进口 爪哇 . 实用程序 . 清单 ; 进口 爪哇 . 实用程序 . 组 ; 上市 类 清单 ToSetCustomObjectMain { 上市 静态的 虚空 主要 (串 args []) { 清单 <国家> 国家列表= 新 数组列表<>(); 国家列表. 加 ( 新 国家(“印度”,20000)); 国家列表. 加 ( 新 国家(“中国”,30000)); 国家列表. 加 ( 新 国家(“不丹”,1000)); 国家列表. 加 ( 新 国家(“尼泊尔”,3000)); 国家列表. 加 ( 新 国家(“印度”,20000)); 系统. 出 .打印(“ == ====================”); 系统. 出 .打印(“国家名单:”); 系统. 出 .打印(“ == ====================”); 对于 (国家 国家:国家列表) { 系统. 出 .打印(国家); } //将列表转换为set 组 <国家> 国家Set= 新 哈希集<国家>(国家列表); 系统. 出 .打印(“ == ====================”); 系统. 出 .打印(“国家组:”); 系统. 出 .打印(“ == ====================”); 对于 (国家 国家:国家Set) { 系统. 出 .打印(国家); } } } |
当您运行上述程序时,将获得以下输出:
国家名单:
== =====================
国家 [name=India, 人口=20000]
国家 [name=China, 人口=30000]
国家 [name=Bhutan, 人口=1000]
国家 [name=Nepal, 人口=3000]
国家 [name=India, 人口=20000]
== =====================
国家集:
== =====================
国家 [name=India, 人口=20000]
国家 [name=Nepal, 人口=3000]
国家 [name=India, 人口=20000]
国家 [name=Bhutan, 人口=1000]
国家 [name=China, 人口=30000]
如您所见,我们有 国家 [name=India, 人口=20000] 在输出中两次,但是这些是重复项,但HashSet不会将其视为重复项。
你知道为什么吗?
因为我们没有实施 哈希码和equals方法 in 国家 类 .
让’s 加 below methods 至 国家 类 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@覆写 上市 整型 hashCode() { 最后 整型 主要 = 31; 整型 结果 = 1; 结果 = 主要 * 结果 + (( 名称 == 空值 ) ? 0 : 名称 .hashCode()); 结果 = 主要 * 结果 + ( 整型 ) (人口 ^ (人口 >>> 32)); 返回 结果; } @覆写 上市 布尔值 等于(目的 对象 ) { 如果 ( 这个 == 对象 ) 返回 真正 ; 如果 ( 对象 == 空值 ) 返回 假 ; 如果 (getClass() != 对象 .getClass()) 返回 假 ; 国家 其他 = (国家) 对象 ; 如果 ( 名称 == 空值 ) { 如果 (其他. 名称 != 空值 ) 返回 假 ; } 其他 如果 (! 名称 .等于(其他. 名称 )) 返回 假 ; 如果 (人口 != 其他.人口) 返回 假 ; 返回 真正 ; } |
当您添加了这两种方法后再次运行以上程序时。您将获得以下输出:
国家名单:
== =====================
国家 [name=India, 人口=20000]
国家 [name=China, 人口=30000]
国家 [name=Bhutan, 人口=1000]
国家 [name=Nepal, 人口=3000]
国家 [name=India, 人口=20000]
== =====================
国家集:
== =====================
国家 [name=India, 人口=20000]
国家 [name=Nepal, 人口=3000]
国家 [name=China, 人口=30000]
国家 [name=Bhutan, 人口=1000]
如您所见,我们只有一个条目 国家 [name=India, 人口=20000] 在集合中。
那’所有关于在Java中将Set转换为列表的内容。