黑马程序员——集合框架(二)
package com.yang.ex;
/*------Set:不包含重复元素 ,其中元素师无序的(存入和取出的顺序不一致)
* |---HastSet:底层数据结构是哈希表
* 是通过元素的两个方法,hastCode和equals来完成
* 如果元素的HashCode值相同,才会判断equals是否为true
* 如果元素的HashCode的值不同,不会调用equals
*
* 注意:对于判断元素是否存在,以及删除等操作,都依赖方法是,元素的HashCode和equals
* 方法
* Arraylist去重只依赖equals
* 但是哈希先判断 HashCode
* |---TreeSet:
* Set集合的功能和Collection是一致的
* 可以对Set集合中的元素进行排序
* 保证元素唯一性的依据是,
* compareTo方法为return 0
*
* TreeSet排序的第一种方式,让元素自身具备比较性。
* 元素需要实现Compareble接口,覆盖compareableto方法
* 这种方式也成为元素的自然顺序,或者称为默认顺序
*
* TreeSet:第二种排序方式。
* 当元素自身不具备比较性是,或者具备的比较性不是所需要的。
* 这是就需要让集合自身具备比较性
* 在集合初始化时,就有了比较方式
*
* */
public class HashSet {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet hashSetdemo=new HashSet();
HashSet hashSetdemo2=new HashSet();
hashSetdemo.hashCode();
hashSetdemo.contains(new Person("a1",11));
System.out.println(hashSetdemo);
System.out.println(hashSetdemo2);
}
class Demo{
public int hashCode() {
return 199;
}
}
}
package com.yang.ex;
/*TreeSet:可以对set集合中的元素进行排序
记住:排序时,请注意次要条件
* 在TreeSet集合中储存自定义对象学生
* 想 按照学生的年龄进行排序
*
*
*
*
*
* */
import java.util.Iterator;
import java.util.TreeSet;
import javax.management.RuntimeErrorException;
public class TreeSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet treeSetDemo=new TreeSet();
treeSetDemo.add(new Student("lisi01",22));
treeSetDemo.add(new Student("lisi02",19));
treeSetDemo.add(new Student("lisi03",20));
treeSetDemo.add(new Student("lisi04",21));
Iterator iterator=treeSetDemo.iterator();
while (iterator.hasNext()) {
Student student=(Student)iterator.next();
System.out.println(iterator.next());
}
}
class Student implements Comparable//该接口强制让学生具有比较性。
{
private String name;
private int age;
Student(String name,int age) {
// TODO Auto-generated constructor stub
this.name=name;
this.age=age;
}
public int compareTo(Object object)
{
if (!(object instanceof Student)) {
throw new RuntimeException("不是学生对象");
}
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
package com.yang.ex;
import java.util.Iterator;
import java.util.TreeSet;
import com.yang.ex.TreeSetDemo.Student;
/*
* 当元素自身不具备比较性,或是具备的比较性不是所需要的
* 这时需要让容器自身具备比较性
* 定义了比较器,将比较器对象作为参赛传递给TreeSet参数
*
* 当两种排序都存在是,以比较器为主
* 定义一个类 实现Comperator接口,覆盖comapare方法。
*
* */
public static class TreeSetDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet treeSetDemo=new TreeSet();
treeSetDemo.add(new Student("lisi01",22));
treeSetDemo.add(new Student("lisi02",19));
treeSetDemo.add(new Student("lisi03",20));
treeSetDemo.add(new Student("lisi04",21));
Iterator iterator=treeSetDemo.iterator();
while (iterator.hasNext()) {
Student student=(Student)iterator.next();
System.out.println(iterator.next());
}
}
}
abstract class MyCompare implements Comparable
{
public int compare(Object object1,Object object2) {
Student student=(Student)object1;
Student student2=(Student)object2;
return 1;
}
}package com.yang.ex;
import java.util.Iterator;
import java.util.TreeSet;
/*按照字符串长度进行排序
* 字符串本身具备比较性,但是他的比较方式不是所需要的
* 这时候只能用比较器
*
*
*
* */
public class TreeSetExce {
public static void main(String[] args)
{
// TODO Auto-generated method stub
TreeSet<String> treeSet=new TreeSet<>();
treeSet.add("abdfsa");
treeSet.add("vfg");
treeSet.add("s");
treeSet.add("hahdhferew");
Iterator<String> iterable=treeSet.iterator();
while (iterable.hasNext()) {
System.out.println(iterable.next());
}
}
}
class StringLengthComperator implements Comparable{
public int compareTo(Object object,Object object2) {
// TODO Auto-generated method stub
String s1=(String)object;
String s2=(String)object2;
if (s1.length()>s2.length())
return 1;
if (s1.length()==s2.length())
return 0;
return -1;
}
}