collection集合接口子类---set接口
set接口需要掌握的内容:
set接口的特点和list接口的区别
HashSet实现类的使用
增删改查
TreeSet实现类的使用
集合的遍历
for增强循环和iterator方法
---------------------------------------------------------------
set接口的特点:
set接口的集合类元素不可中复,继承了collection的方法,没有额外方法。
set是有序的,所以有增、删、查方法,没有修改方法,只能查找找到之后删除再添加,list可以修改。
三个实现方法:Hashset,TreeSet,LinkHashSet
----------------------------------------------------------------
HashSet实现类
特点:散列表,无序的。
HashSet存对象原理:
根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置(表元)中:
如果对应的位置没有其它元素,就只需要直接存入。
如果该位置有元素了,会将新对象跟该位置的所有对象进行比较(调用equals()),以查看是否已经存在了:还不存在就存放,已经存在就放弃加入。
取对象时:
根据对象的哈希码值计算出它的存储索引,在散列表的相应位置(表元)上的元素间进行少量的比较操作就可以找出它。
Set接口存、取、删对象都有很高的效率。
使用HashSet注意:
向HashSet中添加元素时,系统为保证不重复,先比较hashCode( ) ,如果相同,再比较equals(),如果还相同,则认为是同一个对象,不再加入,add(...)返回false,[Demo]
要存入HashSet集合的自定义类型的对象通常需要重写hashCode()和equals()方法。
同一个对象的hash值一定相同,同一个hash值不一定是同一个对象,甚至可能是不同类的对象。
迭代器 iterator的使用
Iterator<e> i=set.iterator//返回一个boolean值
while(i.hasNext()){//判断i调用hasNext()方法的值
e s=i.next();
}
-----------------------------------------------------------------------------
TreeSet实现类
需掌握:增,删,查,自定义比较器(comparator)
特点:有序排列,安照自然顺序排列
添加原理:
TreeSet使用红黑树结构对加入的元素进行排序存放,输出时也会按排序后的顺序, 所以放入TreeSet中元素必须是”可排序的”。
加入TreeSet集合中的javabean类本身要实现Comparable ['kɑmpərəbl]接口
自定义一个实现Comparator['kɑmpə,retɚ]接口的比较器实现类,在创建TreeSet对象时,将自定义比较器传入构造方法
如果加入的类”不可比较”,则add()方法在运行时会报错
自定义比较器:
class Teacher implements Comparable<Teacher>{ //注意范型,不写泛型会用影响
@Override
public int compareTo(Teacher o) { //注意比较的类
//int num = this.age-o.age;
//怎样把一个int型转成其对应的包装类
int num = Integer.valueOf(this.age).compareTo(Integer.valueOf(o.age));
//当主要条件相同时,需要比较次要条件
if(num==0){
num = Integer.valueOf(this.salary).compareTo(Integer.valueOf(o.salary));
}
if(num==0){
num = this.name.compareTo(o.name);
}
return num;
}
}
set接口需要掌握的内容:
set接口的特点和list接口的区别
HashSet实现类的使用
增删改查
TreeSet实现类的使用
集合的遍历
for增强循环和iterator方法
---------------------------------------------------------------
set接口的特点:
set接口的集合类元素不可中复,继承了collection的方法,没有额外方法。
set是有序的,所以有增、删、查方法,没有修改方法,只能查找找到之后删除再添加,list可以修改。
三个实现方法:Hashset,TreeSet,LinkHashSet
----------------------------------------------------------------
HashSet实现类
特点:散列表,无序的。
HashSet存对象原理:
根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置(表元)中:
如果对应的位置没有其它元素,就只需要直接存入。
如果该位置有元素了,会将新对象跟该位置的所有对象进行比较(调用equals()),以查看是否已经存在了:还不存在就存放,已经存在就放弃加入。
取对象时:
根据对象的哈希码值计算出它的存储索引,在散列表的相应位置(表元)上的元素间进行少量的比较操作就可以找出它。
Set接口存、取、删对象都有很高的效率。
使用HashSet注意:
向HashSet中添加元素时,系统为保证不重复,先比较hashCode( ) ,如果相同,再比较equals(),如果还相同,则认为是同一个对象,不再加入,add(...)返回false,[Demo]
要存入HashSet集合的自定义类型的对象通常需要重写hashCode()和equals()方法。
同一个对象的hash值一定相同,同一个hash值不一定是同一个对象,甚至可能是不同类的对象。
迭代器 iterator的使用
Iterator<e> i=set.iterator//返回一个boolean值
while(i.hasNext()){//判断i调用hasNext()方法的值
e s=i.next();
}
-----------------------------------------------------------------------------
TreeSet实现类
需掌握:增,删,查,自定义比较器(comparator)
特点:有序排列,安照自然顺序排列
添加原理:
TreeSet使用红黑树结构对加入的元素进行排序存放,输出时也会按排序后的顺序, 所以放入TreeSet中元素必须是”可排序的”。
加入TreeSet集合中的javabean类本身要实现Comparable ['kɑmpərəbl]接口
自定义一个实现Comparator['kɑmpə,retɚ]接口的比较器实现类,在创建TreeSet对象时,将自定义比较器传入构造方法
如果加入的类”不可比较”,则add()方法在运行时会报错
自定义比较器:
class Teacher implements Comparable<Teacher>{ //注意范型,不写泛型会用影响
@Override
public int compareTo(Teacher o) { //注意比较的类
//int num = this.age-o.age;
//怎样把一个int型转成其对应的包装类
int num = Integer.valueOf(this.age).compareTo(Integer.valueOf(o.age));
//当主要条件相同时,需要比较次要条件
if(num==0){
num = Integer.valueOf(this.salary).compareTo(Integer.valueOf(o.salary));
}
if(num==0){
num = this.name.compareTo(o.name);
}
return num;
}
}