Chapter 8 对象集合

8.1 顺序容器

容器是现代程序设计非常基础而重要的手段。

所谓容器,就是“放东西的东西”。数组可以看作是一种容器,但是数组的元素个数一旦确定就无法改变,这在实际使用中是很大的不足。一般意义上的容器,是指具有自动增长容量能力的存放数据的一种数据结构。在面向对象语言中,这种数据结构本身表达为一个对象。所以才有“放东西的东西”的说法。

Java具有丰富的容器,Java的容器具有丰富的功能和良好的性能。熟悉并能充分有效地利用好容器,是现代程序设计的基本能力。

我们首先学习的是顺序容器,即放进容器中的对象是按照指定的顺序(放的顺序)排列起来的,而且允许具有相同值的多个对象存在。

泛型类 ArrayList<>

ArrayList<String> notes = new ArrayList<String>();

ArrayList是系统类库中的一个容器类。

  • 容器类有两个类型:
  • 容器的类型
  • 元素的类型

记事本源码如下:

package notebook;

import java.util.ArrayList;

/**
 * Created by WZZ on 10/31/2016.
 */
public class Notebook {
    private ArrayList<String> notes = new ArrayList<String>();

    public void add(String s){
        notes.add(s);
    }
    public void add(String s, int location){
        notes.add(location, s);
    }

    public int getSize(){
        return notes.size();
    }
    public String getNote(int index){
        return notes.get(index);
    }
    public void removeNote(int index){
        notes.remove(index);
    }
    public String[] list(){
        String[] a = new String[notes.size()];
        notes.toArray(a);
        return a;
    }

    public static void main(String[] args) {
        Notebook nb = new Notebook();
        nb.add("First");
        nb.add("Second");
        nb.add("Third", 1);
        System.out.println(nb.getSize());
        System.out.println(nb.getNote(0));
        System.out.println(nb.getNote(1));
        nb.removeNote(1);

        String[] a = nb.list();
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}

8.1 对象数组

当数组的元素的类型是类的时候,数组的每一个元素其实只是对象的管理者而不是对象本身。因此,仅仅创建数组并没有创建其中的每一个对象!

String[] a = new String[10];
  • 当我们创建了一个String数组后,String数组中的每一个元素都是指向String类对象的管理者而已。默认为"null".
  • 对象数组中的每个元素都是对象的管理者而非对象本身
Paste_Image.png

举例:

    public static void main(String[] args) {
        int[] ia = new int[10];
        String[] a = new String[10];
        for (int i = 0; i < a.length; i++) {
            a[i] = ""+i;
        }
//        System.out.println(ia[0]+2);
//        System.out.println(a[0]+"a");
        System.out.println(a[0].length());
        String s = null;
        System.out.println(s.length());
    }

输出结果;

1
Exception in thread "main" java.lang.NullPointerException
    at notebook.Notebook.main(Notebook.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,585评论 18 399
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,042评论 6 13
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,441评论 0 3
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,510评论 11 349
  • 一位诗人说:如果一朵花不美,就请欣赏它的叶子;如果叶子不美,就请欣赏它的枝干;如果枝干不美,就请欣赏它的根基;如果...
    桅子花撒满人间阅读 1,864评论 0 0

友情链接更多精彩内容