黑马程序员_JavaSE基础17 之 集合框架 Vector LinkedList ArrayList HashSet LinkedHasSet TreeSet

----------------------      android培训、java培训、期待与您交流!   ---------------------
JavaSE_17  笔记 
                        Java语言基础之  集合框架 Vector LinkedList ArrayList HashSet LinkedHasSet TreeSet 
 
1、集合框架之 Vector集合
① Enumeration实现 遍历
Enumeration enumeration=v.elements();
while(enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}
       
2、集合框架之 LinkedList 
 ① link.getFirst(); // 获取第一个但不删除;
 ② link.removeFirst(); // 删除第一个并返回;
 ③ 遍历方式一
while(!link.isEmpty()){
System.out.println( link.removeFirst());
}
}
 
3、集合框架之 ArrayList 
 
4、何时装箱:
基本类型值赋值给 引用类型值时 用装箱。比如 Integer it= 5; 
 
5、集合框架 之 HashSet
 ① 内部数据结构是哈希表,不保证迭代顺序。
 ② 是不同步的。
 ③ 为何无序?
  因为存储的元素是根据某个算法计算出的哈希值,来进行存储的。存储位置是随机的,所以无序。
 ④ 哈希表如何确定元素是否相同。
首先判断两个元素的哈希值是否相同;若相同在判读两个对象的内容是否相同。
判读哈希值是否相同,其实判读的是对象的hashcode();判读内容是否相同,用的是equals();
 ⑤ HashSet存储元素的方法: ha.add( obj ) ; 
 HashSet集合数据结构是哈希表,所以存储元素的时候,使用的元素的hashCode方法带来的不确定位置,如果位置相同的情况下,在通过元素的equals来确定是否相同。
 ⑥ 事例://往HashSet集合中添加Person对象,若姓名和年龄相同视为同一人
        //首先添加人
HashSet hs=new HashSet();
hs.add(new Person("lisi4",24));
hs.add(new Person("lise5",27));
hs.add(new Person("lisi8",21));
hs.add(new Person("lise1",29));
hs.add(new Person("lise1",29));
//其次重写hashcode()和equals()
 public class Person extends Object{
 
@Override
public int hashCode() {  //位置的确定:默认用的是父类Object的hashCode(),那么对于判断特定的人来说,重写就OK了
 
return name.hashCode()+age*22;
}
@Override
public boolean equals(Object obj) {  //若哈希值位置相同的话,再判断其内容是否相同。
if(this==obj)    //判断是否是同一对象,若是的话,没必要在判断内容,肯定相同
return true;
if(!(obj instanceof Person)) //判断是否是可以比较的对象,若不是,就不需要再比较内容了,直接异常
throw new ClassCastException("类型错误");
 
Person p=(Person)obj;
return this.name.equals(p.name) && this.age==p.age;
}
 
6、集合框架之 LinkedHashSet 
  HashSet使用hashcode()和equals()可以保证不重复,但不能保证有序。使用LinkedHashSet类可以保证有序,即怎么存进去就怎么取出来。
  本质是哈希表和链表的结合。
 
7、集合框架 之 TreeSet
 ① 无序,即取出和存入的不一致;但是它有指定顺序,是按照元素的字典顺序对Set集合进行排序,是不同步的。 
   判断元素唯一性的方式:就是根据比较方法的返回结果是否是0,是0就是相同元素,不存。
 ② 特点:元素不重复,但是可以对Set集合中的元素进行排序。
 ③ 注意:因为TreeSet 在添加元素是必然有比较,是不同于HashSet的,所以要继承Comparable接口,重写compareTo方法。
 
public class Person implements Comparable {
 
@Override
public int compareTo(Object o) {
Person p=(Person)o;
if(this.age>p.age)
return 1;
if(this.age<p.age)
return -1;
 
return 0;
}
① TreeSet 对元素进行排序的方式一:
让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法。
② TreeSet对元素进行排序的方式二:如果不要按照对象中具备的自然顺序进行排序,若果对象中不具备自然顺序。即Person类的compareTo方法不是你写的。
方法是让集合自身具备比较功能:
   定义一个类实现comparator接口,覆写期compare方法,然后定义TreeSet类时,将此对象作为构造函数的对象进行传递。
事例:根据Person类的name进行排序比较器。
public class CollectionDemo implements Comparator {
 
@Override
public int compare(Object o1, Object o2) {
Person p1=new Person();
Person p2=new Person();
 
int temp=p1.getName().compareTo(p2.getName());
return temp==0?p1.getAge()-p2.getAge():0;
 
}
}
 
7、事例: 字符串长度排序
分析:因为String类时Java已经写好的对象,所以不能通过重写compareTo方法来进行比较,那么只能通过实现Comparator接口来定义比较器实现了。
这样在 ts.add(str1) ; ts.add(str2); 添加String对象时就可以调用compate方法来实现长度的比较了。
 
 
 
                                                                   2012/9/11     By  Mary_
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值