Thinking in Java 学习笔记 ——持有对象

在Java里,

Obejct a; //只是一个引用,并没有创建对象,此时a指向null
Objetc a = new Object(); //将a引用指向new Object()这个对象,即将右边的对象的地址传给了左边的引用

而在编程过程中,需要在任意时刻和任意位置创建任意数量的对象,所以不能依靠创建命名的引用来持有每一个对象。

于是,我们需要用某种方式来保存多个对象。

Java提供了许多容器类来解决这个问题。

基本类型:

  • List (collection)
  • Set(collection)
  • Queue(collection)
  • Map

他们都可以自动调整尺寸(原理?)

前三者都继承自Collections接口,表示独立元素的序列。Map仅仅是继承了Object,表示成对的键值对对象。

Java.util 里的Array,Collections类里的用于在Collection里添加一组元素:
Arrays.asList() 接收一个数组或者是用逗号分隔的元素列表, 将其转化为List对象。e.g:

import java.util.*;

public class AddingGroups {
    public static void main(String args[]) {
        List<String> str = Arrays.asList("h", "e","l","l", "o");
        for(String i: str)
            System.out.print(i);
        System.out.print('\n');
    }
}

//Result
hello

Collections.addAll() 接收一个Collection对象以及一个数组或者一个用逗号分割的列表,将其添加到Collection中。

List

ArrayList 相当于数组

LinkedList 相当于链表

List 允许在被创建后添加元素,移除元素或者自我调整尺寸。

contains(): 一个对象是否在列表里

remove(引用): 移除一个对象

indexOf(引用): 该对象在List中所处的位置的索引编号

equals()

subList(): 从较大的列表里创建出一个片断

retainAll(): 交集

toArray(): 会将任意Collection转化为一个数组。无参数: Object数组 参数:指定类型

迭代器

为了能不关心容器类型,应用于不同容器,使用迭代器。

Iterator只能单向移动:

  1. 使用方法iterator要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
  2. 使用next()获得列表中下一个元素。
  3. 使用hasNext()检查序列中是否还有元素。
  4. 使用remove()将迭代器新返回的元素删除。
  • 如果不打算修改List本身,用forEach
  • Iterator还可以移除由next()产生的最后一个元素,意味着在调用remove()之前必须先调用next()。

ListIterator 只用于List类,能双向移动。(相当于是个双向链表?)

List<Pet> pets = Pets.arrayList(8);
ListIterator<Pet> it = pets.listIterator();
while(it.hasNext())
    System.out.print(it.next() + ", " + it.nextIndex() + ", " + it.previousIndex() + "; ");

Stack可以由LinkedList实现。

Foreach & Iterator

foreach 主要用于数组,但也可以用于任何Collection对象。

Java SE5 引入了一个Iterable的接口,里面包含一个能产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。

public class CustomIterable implements Iterables<String> {
 public Iterator<String> iterator(){
return new Iterator<String> () {
blablabla//实现hasNext next remove
}
};

}

public static void main(String[] args) {
for(String s: new CustomIterable()){
//do something
}
}

foreach 语句可以用于数组或其他任何Iterable,但这并不意味着数组一定是一个Iterable。

例如,Arrays.asList(1,2,3); 可以for(T t: array) 但不是一个Iterable

不存在任何从数组到Iterable自动转换,必须手动转换。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Thinking in Java》是一本经典的Java编程入门教材,通过阅读该书可以系统地学习Java编程的基础知识和高级概念。阅读过程中,我结合自己的学习体验和实践,进行了详细的学习笔记。 首先,该书从基础语法开始介绍,包括数据类型、控制语句、数组等。对于初学者来说,这些基础知识是最基本的,通过书中的示例代码和解析,我能够更好地理解这些概念和语法规则。 其次,书中对面向对象编程进行了深入的讲解。通过学习面向对象的思想,我明白了类、对象、继承、多态等概念的含义和使用方法。同时,书中还讲解了接口、内部类、异常处理等较为高级的概念,极大地拓宽了我的Java知识面。 另外,该书还介绍了Java的常见类库和工具,如字符串操作、集合框架、输入输出、线程等。这些内容对于实际开发非常有用,而且书中的示例代码也能帮助我更好地理解和应用这些类库和工具。 此外,该书通过大量的实例和案例,生动地展示了Java编程的实战应用。这些实例涵盖了各种不同的应用场景,从简单的程序到复杂的项目,都有所涉及。通过分析这些实例,我不仅可以学习到实际编程的技巧,还能提高自己的解决问题的能力。 总的来说,读完《Thinking in Java》后,我对Java编程有了更深入的理解和掌握。通过学习笔记的整理,我不仅复习了各个知识点,还加深了对这些概念的理解。希望这份学习笔记能够帮助到其他想要学习Java的同学,让他们能够更快地入门和掌握这门编程语言

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值