您的位置:首页 > 其它

马士兵视频学习第三天总结

2013-03-10 23:14 253 查看
1. 容器的基础



上图为容器API的类图,两个父类接口Collection和Map,Collection有其子类接口set,list,每一个具体类中都要实现相应接口中的方法。

2. 在容器中添加和删除元素

在容器的使用过程中,比如:新建了一个Collection接口的引用,指向了一个HashSet容器Collection c = new HashSet();向其中add了字符串常量"Hello"以及Integer的对

象c.add("Hello");c.add(new Integer(100));(add的只能为一个对象不能为一个基本类型的元素,因为基本类型元素时分配在栈中的可能随时发生更改),然后调用

了c.remove("Hello");以及c.remove(new Integer(100));那么c容器中的"Hello"和Integer对象是会被删除的,因为在调用remove方法时实际响应的是此对象的equals方法,

即当remove的对象和容器中现有的对象equals的时候就会被删除,String和Integer都重写了equals方法(值相等即为相等),所以调用remove方法会删除c中对应的对象,

但是如果是自己新建的类的对象,比如:Name类的对象c.add(new Name("Mike", "Zeko"));c.remove(new Name("Mike", "Zeko"));,如果在Name类中没有重写equals

方法的话最终Name("Mike", "Zeko")将不会被删除,因为没有重新equals方法默认使用的是Object类的equals方法,比较的是他们的引用是否相等,自然不会被删除。

3. Iterator的使用

Iterator是一个接口,其作用是遍历整个Collection,在Collection接口中有一个iterator()方法,此方法返回一个iterator类型的引用,也就是说我在使用任何Collection的子类

定义的对象时都可以调用iterator()方法返回一个iterator类型的引用,通过一个iterator对象可以对Collection中的元素进行访问,如:

Collection c = new HashSet();

c.add(new Name(··, ··));

c.add(···);

····

for(Iterator i = c.iterator; i.hasNext; ) {

Name name = (Name)i.next();

if(name.getFirstName.length() < 3)

i.remove();

}

其中的i.remove();不能使用c.remove(name);因为在使用Iterator的时候对c进行了封锁,在使用过程中只能通过Iterator的对象来访问不能通过其他的方式访问修改(线程的知识)

4. Map中的Auto-Boxing和Unboxing

使用Map时传递两个值,一个是key一个是value,使用put方法向Map的对象中赋值,如果两次赋值的key值都是相同的,那么后一次赋值将取代之前此key中的value值。

Map初始化时要求传递的是两个对象,但是如果传递了一个基础类型的数据,如:map.put("one", 1);那么后面的基础类型数值1将会被自动打包成Integer类型的对象。

而在取出map中的元素value时取出的将是一个Object类型的值,将其强制转换为Integer类型的值并赋值给一个int类型的值的时候会自动解包,如:

int i = (Integer)map1.get("three");

自动打包解包不仅在此处应用,在JDK1.5之后只要把一个基础类型的元素赋值给其相应的包装类的对象就会自动打包,把一个基础类型包装类对象赋值给对应的基础类型变量

就会自动解包,例如:

int k = new Integer(4);

System.out.println(k);

Integer l = 2;

System.out.println(l);

5. 关于OutputStream和Write中的write方法

在使用FileOutputStream对象或BufferedWriter的对象调用write()方法的时候,调用此方法时并没有直接把相应的数据写到文件中,而是在关闭文件的时候才把所有信息一起

写到输出文件中,这个是什么原因?感觉应该是有缓冲区的原因吧?今天还没有解决,有待继续学习解决···
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: