java中Set的基本用法

368 阅读6分钟
Set
集合的常用方法:
初始化方法:
Set<String> testSet = new HashSet<String>();
testSet.add("Java");
Set<String> testSet = new HashSet<String>(){{
add("morning");
add("afternoon");
}}
其他常用方法:
add(E e)
:如果
Set
集合中不存在指定元素,则增加此元素。
addAll(collection c)
:如果
Set
集合中没有指定
collection
中的所有元素,则增加。
clear()
:移除
Set
中的所有元素。
contains(object o)
:如果
Set
集合中包含指定元素,则返回
true
containsAll(collection c)
:如果
Set
集合中包含
collection
中的所有元素,返回
true
equals(object o)
:判断指定对象与此
Set
集合是否相等。
hashCode()
:返回此
Set
的哈希码值。
isEmpty()
:判断
Set
集合是否为空,为空返回
true
iterator()
:返回在此
Set
的元素上进行迭代的迭代器。
remove(object o)
:移除
Set
集合中的指定元素。
removeAll(collection c)
:移除
Set
中包含在
collection
中的元素。
retainAll(collection c)
:仅保留
Set
中包含在
collection
中的元素。
size()
:返回
Set
集合中的元素的个数。
toArray()
:返回一个包含
Set
中所有元素的数组。
Set
集合与
List
集合的区别就是,
Set
集合的元素不能重复,
List
集合的元素是可以重复的。
// HashSet
LinkedHashSet
用法及特点
/**
*
编写一个
ArrayList
集合 用
Set
去重
*
为了保证顺序 我们用
LinkedHashSet
*/
public static void fun6() {
ArrayList<String> aList = new ArrayList<>();
aList.add("b");
aList.add("a");
aList.add("a");
aList.add("b");
aList.add("c");
aList.add("c");
LinkedHashSet<String> hSet = new LinkedHashSet<>();
hSet.addAll(aList);
aList.clear();
aList.addAll(hSet);
System.out.println(aList);
}/**
*
编写一个 从键盘键入一连串字符串
,
将重复的字符串去掉
,
打印出不通过的字符
*/
public static void fun5() {
System.out.println("
请输入一连串字符
: ");
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
char[] charArray = s1.toCharArray();
HashSet<Character> hSet = new HashSet<>();
for (int i = 0; i < charArray.length; i++) {
hSet.add(charArray);
}
System.out.println(hSet);
}/**
*
编写一个 随机
/
不重复的
10
个数的程序
* Set
集合实现不重复
*/
public static void fun4() {
HashSet<Integer> hSet = new HashSet<>();
while (hSet.size() < 10) {
int i1 = (int)(Math.random() * (20 - 1 + 1) - 1);
hSet.add(i1);
}
System.out.println(hSet);
}/**
* LinkedHashSet
特点
:
有序的
(
怎么存的可以怎么取出来
)
*
底层实现是链表实现
*
同样具有
Set
的去重的特点
*/
Set
clear()
方法
set
是一个无序集合,方法很多,
set
只允许添加同一类型的数据,这个在使用
add(),
addAll()
的时候只需要注意集合是否已经有值,即将加入的值是否跟当前里面的值是否是同一外汇返佣
http://www.kaifx.cn/
类型即可,此问题比较简单,今天我们说一下
clear()
方法;使用时一定要注意
:
它会将连同里面的对象的值一起清除;
`
通过测试我们发现,使用
clear()
之前我们
map
中的值一直存在;使用之后,不仅清除了
set
中的数据,我们
map
中的数据一起被清除;但是
map
对象依然存在,我们可以重新加入新类型的数据;
测试代码
public static void main(String[] args) {
Map map = new HashMap();
//
加入
int
数据
map.put("a", 1);
map.put("b", 2);
map.put("c", 3); Set set = map.keySet();
System.out.println(set); set = map.entrySet();
System.out.println("map---
" + map);
System.out.println("set---
" + set); //
使用
clear
set.clear();
System.out.println("map---
" + map);
System.out.println("set---
"+set); //
加入新类型(字符串)的数据
map.put("a", "
测试
");
map.put("b", "
测试结束
");
System.out.println("map---
重新加入
" + map);
}
测试结果
[a, b, c]
map---
{a=1, b=2, c=3}
set---
[a=1, b=2, c=3]
map---
{}
set---
[]
map---
重新加入
{a=
测试
, b=
测试结束
}
public static void fun3() {
LinkedHashSet<String> lSet = new LinkedHashSet<>();
lSet.add("c");
lSet.add("a");
lSet.add("a");
lSet.add("c");
lSet.add("b");
lSet.add("b");
lSet.add("d");
lSet.add("d");
for (String string : lSet) {
System.out.println(string);
}
}/**
*
去除对象
---
需要重写
HashCode()
equals()
*/public static void fun2() {
HashSet<Person> hSet = new HashSet<>();
hSet.add(new Person("
科比
" , 18));
hSet.add(new Person("
加索尔
" , 19));
hSet.add(new Person("
费舍尔
" , 20));
hSet.add(new Person("
拜纳姆
" , 21));
hSet.add(new Person("
奥多姆
" , 22));
hSet.add(new Person("
奥多姆
" , 22));
hSet.add(new Person("
科比
" , 18));
hSet.add(new Person("
加索尔
" , 19));
hSet.add(new Person("
费舍尔
" , 20));
hSet.add(new Person("
拜纳姆
" , 21));
for (Person personCopy : hSet) {
System.out.println(personCopy);
}
}/**
* Set
接口特点
:
无下标 无顺序
**
无重复
**
*/
public static void fun1() {
HashSet<String> hSet = new HashSet<>();
hSet.add("c");
hSet.add("a");
hSet.add("a");
hSet.add("c");
hSet.add("b");
hSet.add("b");
hSet.add("d");
hSet.add("d"); for (String string : hSet) {
System.out.println(string);
}
}
TreeSet
用法及特点
//
计数器
/**
*
键盘录入
5
个学生信息
(
姓名
,
语文成绩
,
数学成绩
,
英语成绩
)
*
按照总分从高到低输出到控制台。
*/
public static void fun13() {
System.out.println("
请输入姓名及成绩
:");
Scanner scanner = new Scanner(System.in);
TreeSet<Clases1> tSet = new TreeSet<>();
while(tSet.size() < 5) {
String s1 = scanner.nextLine();
String[] split = s1.split(",");
int parseInt = Integer.parseInt(split[1]);
int parseInt2 = Integer.parseInt(split[2]);
int parseInt3 = Integer.parseInt(split[3]);
int num = parseInt + parseInt2 + parseInt3;
tSet.add(new Clases1(split[0], parseInt, parseInt2, parseInt3, num)); }
System.out.print(tSet);
}/**
*
程序启动后
,
可以从键盘输入接收多个整数
,
直到输入
quit
时结束输入
.
*
把所有输入的整数倒序排列打印
.
*/
public static void fun12() {
System.out.println("
请输入一个字符串
");
Scanner scanner = new Scanner(System.in);
TreeSet<Integer> tSet = new TreeSet<>(new Compara3());
while(true) {
String s1 = scanner.nextLine();
if (s1.equals("quit")) {
break;
}
int parseInt = Integer.parseInt(s1);
tSet.add(parseInt);
}
System.out.println(tSet);
}/**
*
键盘接受一个字符串 程序对其中所有字符进行排序
*/
public static void fun11() {
System.out.println("
请输入一串字符串
: ");
Scanner scanner = new Scanner(System.in);
String s1 = scanner.nextLine();
char[] charArray = s1.toCharArray();
TreeSet<Character> tSet = new TreeSet<>(new Compara2());
for (int i = 0; i < charArray.length; i++) {
tSet.add(charArray);
}
System.out.println(tSet);
}/**
* ArrayList
存储无序并且重复的字符串
,
要求排序 并且不能去除重复
*/
public static void fun10() {
ArrayList<String> aList = new ArrayList<>();
aList.add("aaa");
aList.add("asd");
aList.add("ww");
aList.add("zz");
aList.add("CC");
aList.add("a");
aList.add("bcd");
aList.add("aaa");
TreeSet<String> tSet = new TreeSet<>(new compara1());
tSet.addAll(aList);
aList.clear();
aList.addAll(tSet);
System.out.println(aList);
}/**
*
使用比较器 比较排序集合中的元素
.
要求保留重复
*
重写比较器
comparator<T>
接口 实现自己想要的比较方法
*
注意
:
要记着将
comparator
的实现类要创建在 集合中
*/
public static void fun9() {
TreeSet<String> tSet = new TreeSet<>(new compara1());
tSet.add("aaa");
tSet.add("asd");
tSet.add("ww");
tSet.add("zz");
tSet.add("CC");
tSet.add("a");
tSet.add("bcd");
tSet.add("aaa");
System.out.println(tSet);
}/**
* TreeSet
存储类对象
,
进行排序 要在创建对象的类中重写
compareTo
方法
* TreeSet
存储的是类对象
,
就要看
compareTo
的返回值
*
返回
0
只是一个值
*
返回正数 按存进顺序 正序
*
返回负数 按存进顺序 倒序
*
* TreeSet
内部使用 二叉树来存储的
*
核心
:
*
比我小的数存在左边
(
返回负数时
)
*
比我大的数存在右边
(
返回正数时
)
*
不存储
,
两个数相等
(
返回
0
)
*
*/
public static void fun8() {
TreeSet<Man> tSet = new TreeSet<>();
tSet.add(new Man("
科比
", 19));
tSet.add(new Man("
乔丹
", 20));
tSet.add(new Man("
库里
", 21));
tSet.add(new Man("
格林
", 18));
tSet.add(new Man("
书豪
", 19));
tSet.add(new Man("
书豪
", 200));
System.out.println(tSet);
}/**
* TreeSet
的特点
: **
排序
**(
去重
)
*/
public static void fun7() {
TreeSet<Integer> tSet = new TreeSet<>();
tSet.add(5);
tSet.add(4);
tSet.add(1);
tSet.add(2);
tSet.add(3);
tSet.add(5);
tSet.add(5);
for (Integer integer : tSet) {
System.out.println(integer);
}
}
总结
:
Set
中的元素是不能重复的,如果使用
add(Object obj)
方法添加已经存在的对象,则会覆盖前面的对象
为什么要使用集合类
当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

更多技术资讯可关注:itheimaGZ获取