2019/11/5 9:45:39
目标任务:三种集合之Set集合,Set集合两种应用方法 HashSet 和 TreeSet###
什么是集合?
答: 在创建Java数组时,必须明确指定数组长度,数组一旦创建,其长度就不能被改变。为了使程序能方便的存储和操纵数目不固定的一组数据,JDK类库提供了Java集合。如:
- Set (集)
- HashSet TreeSet 有这两种声明方式
- List(列表)
- ArrayList
- Map(映射)
- HashMap TreeMap
一、Set 的 HashSet声明##
1.需获取hashCode和equals的方法
直接获取:右键---》source----》hashCode equals
2.HashSet声明Set集
Set<String> set=new HashSet<String>();
3.往Set集中添加、移除元素等
set.add("1");
set.add("2");
set.add("2");
set.remove(index);//输入下标index
set.size();//获取set集长度,相同的内容当成一个长度
4.遍历两种方法
1. forEach 遍历
public static void show(Set<String> set)
{
for (String string : set) {
System.out.println(string);
}
}
2.Iterator 迭代器 遍历
public static void show1(Set<String> set)
{
//迭代器
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) //是否还有更多的元素
{
String str=iterator.next(); //取出当前指针指向的那个元素
System.out.println(str);
}
}
二、Set 的 TreeSet声明
1.需获取hashCode和equals的方法
直接获取:右键---》source----》hashCode equals
2.需要继承Compare接口
public class Student implements java.lang.Comparable{
//声明属性
.......
public int compareTo(Object o) {//重写方法
return 0;
}
3.HashSet声明Set集
Set<String> set=new TreeSet<String>();
4.往Set集中添加、移除元素等
set.add(5);
set.add(8);
set.remove(index);//输入下标index
set.size();//获取set集长度,相同的内容当成一个长度
5.遍历两种方法
1. forEach 遍历
public static void show(Set<String> set)
{
for (String string : set) {
System.out.println(string);
}
}
2.Iterator 迭代器 遍历
public static void show1(Set<String> set)
{
//迭代器
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) //是否还有更多的元素
{
String str=iterator.next(); //取出当前指针指向的那个元素
System.out.println(str);
}
}
几点重要说明:
- Object类中的hashCode()的方法是所有子类都会继承这个方法,这个方法会用Hash算法算出一个Hash(哈希)码值返回,HashSet会用Hash码值去和数组长度取模,模(这个模就是对象要存放在数组中的位置)相同时才会判断数组中的元素和要加入的对象的内容是否相同,如果不同才会添加进去。
- 存入HashSet的集合对象中的自定义类必须覆盖hashCode(),equals()两个方法,才能保证集合中元素容不重复。在覆盖和hashCode()方法时,要使相同对象的hashCode()方法返回相同值,覆盖equals()方法再判断其内容。为了保证效率,所以在覆盖hashCode()方法时,也要尽量使不同对象尽量返回不同的Hash码值。
- 如果数组中的元素和要加入的对象的hashCode()返回了相同的Hash值(相同对象),才会用equals()方法来判断两个对象的内容是否相同。
TreeSet 要在类中实现比较器接口
总结:
- set可以放入一个null,但是不能放重复的元素
- HashSet如果放入自定义类型,需要自己定义实现 equals hashCode
- TreeSet如果放入自定义类型,需要自定义实现equals hasCode,还需要实现java.lang.compare接口
放入自定义类型,需要自己定义实现 equals hashCode
- TreeSet如果放入自定义类型,需要自定义实现equals hasCode,还需要实现java.lang.compare接口