Encapsulation can make things change-Create a container that demostrates the "resize" of an array

原创 2004年08月11日 23:41:00

It is generally belived that once an array has been initialized, its size is unmodifiable. This concept is right.

But through composition, so called “Encapsulation”, we can make it possible to “change” the size of an array by changing its reference.

As we all know, Java has a quite different mechanism from C++ does that it has no pointer but references which are used to point at Objects and when you change the reference, the Object of it won't be modified.

When you say:

String a=“a“;

String b=“b“;

String c=b;

and then:

b=a;

the result is:

a=“a“;

b=“a“;

c=“b“;

Because b points to Object that reference “a“ is pointing to. And no Ojbect was changed.

So, we can “change” an array's length by changing its reference:

String[] str1={“0“,“1“,“2“};

String[] str2=new String[4];

System.arraycopy(0,str1,0,str2,str1.length);

str1=str2;

and now, str1 has one more element to use;

The following program demostrates this:

import java.util.*;
//make an container encapsulating an array of String that can be resized
public class Ex12 {
 int index=0;
 private String[] str;
 private List list;
 public Ex12(int size) {
  str=new String[size];  
 }
 public Ex12() {
  str=new String[10];  
 }
 
 public void add(String s) {
  if(index<str.length)
   str[index++]=s;
  else {
   String[] str2=new String[str.length+1];
   System.arraycopy(str,0,str2,0,str.length);
   str2[index++]=s;
   //just change the object that str refers to   
   str=str2;//now str's length is "increased"
  }
 }
 //get element i of the array
 public String get(int i) {
  return str[i];
 }
 //get the size of the array
 public int size() {
  return str.length;
 }
 public String toString() {
  StringBuffer sb=new StringBuffer("[ ");
  int i=0;
  while(i<str.length-1) {  
   sb.append(str[i]+", ");
   i++;
  }
  sb.append(str[str.length-1]+" ]");
  return sb.toString();
 }
 public static void main(String[] args) {
  Ex12 e=new Ex12(20);
  for(int i=0;i<20;i++) {
   e.add(Integer.toString(i));
  } 
  //No Exception will be thrown
  e.add("This is 21st element");
  e.add("No ArrayIndexOutOfBoundsException");
  System.out.println(e);
 }
}

 

XAMPP配置apache环境,用于运行rockmongo遇到的若干问题

XAMPP配置apache环境,用于运行rockmongo遇到的若干问题
  • ghost0620
  • ghost0620
  • 2016年01月13日 15:41
  • 988

记录:activeandroid数据库工具注解字段,在android6.0里Gson解析确出错了

在使用activeandroid数据可工具的时候遇到在android6.0一下gson解析是正确的,但是拿到android6.0的机子上就报错了。 一开始在真机(荣耀6)上报出的错误的是乱七八糟的;用...
  • fuck_there
  • fuck_there
  • 2016年08月25日 19:58
  • 770

HDU 1056 HangOver (简单数学题)

题意: 意思就是 你输入一个长度,问你最少用几张卡片能 让伸出去的长度大于等于你输入的长度.公式题目题目上面有 Problem Description How far...
  • h1021456873
  • h1021456873
  • 2016年01月15日 14:16
  • 949

直接来第一篇吧----JAVA的三大特性之一:封装(Encapsulation)

直接来第一篇吧—-JAVA的三大特性之一:封装(Encapsulation) 1.大概概念 封装是面向对象的重要原则,就是把对象的属性和操作结合成为一个独立的整体,并尽可能的隐藏...
  • ltpaini
  • ltpaini
  • 2015年07月08日 16:23
  • 1012

小型数据的缓存

//缓存数据的工具类 /** * Copyright (c) 2012-2013, Michael Yang 张忍钰(www.yangfuhai.com). * * Licensed un...
  • baidu_31571123
  • baidu_31571123
  • 2016年05月13日 17:56
  • 296

Android Things做一个简易相机

Android Things做一个简易相机Android Things已经发布有一段时间了,最近买了块树莓派3的板子,研究一下Android Things开发。...
  • liuweihhhh
  • liuweihhhh
  • 2017年03月13日 17:34
  • 2019

Android Things 专题6 完整的栗子:运用TensorFlow解析图像

文| 谷歌开发技术专家 (GDE) 王玉成 (York Wang)前面絮叨了这么多,好像还没有一个总体的概念,我们如何写一个完整的代码呢?现在深度学习很火,那我们就把 Android Things 做...
  • wfing
  • wfing
  • 2017年03月22日 20:53
  • 5139

Android 自己动手编译android源码

最近尝试编译android源码,中间遇到一些问题,记录一下。   0x01: 编译之前,强烈建议先看看google的[官方文档],哪怕是使用翻译工具也要看完。 其中提到的编译环境是Ubuntu...
  • pcaxb
  • pcaxb
  • 2015年07月10日 20:30
  • 4067

Android Things:用户驱动-传感器

一、传感器简介Android传感器框架支持多种传感器类型来测量物理环境的状况,并且从应用程序读取原始数据。使用传感器驱动,你的应用可以扩展框架,并且添加新的通过Peripheral I/O连接的传感器...
  • p106786860
  • p106786860
  • 2017年05月16日 11:24
  • 1277

Android Things专题 1.前世今生

文| 谷歌开发者技术专家, 物联网方向 (IOT GDE) 王玉成(York Wang) 2016 年 12 月,Google 发布了 Developer Preview 版的 Android Thi...
  • wfing
  • wfing
  • 2017年02月20日 21:39
  • 7245
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Encapsulation can make things change-Create a container that demostrates the "resize" of an array
举报原因:
原因补充:

(最多只允许输入30个字)