黑马程序员——集合框架(二)

 
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;
}
 
 
 
}
posted @ 2014-09-07 00:14  大成哥  阅读(95)  评论(0编辑  收藏  举报