GVKun编程网logo

为什么ArrayList实现RandomAccess接口?(arraylist报错)

14

对于想了解为什么ArrayList实现RandomAccess接口?的读者,本文将是一篇不可错过的文章,我们将详细介绍arraylist报错,并且为您提供关于ArrayAccess接口介绍、Array

对于想了解为什么ArrayList实现RandomAccess接口?的读者,本文将是一篇不可错过的文章,我们将详细介绍arraylist报错,并且为您提供关于ArrayAccess接口介绍、ArrayAccess接口介绍_PHP教程、arrayAccess的接口使用,arrayaccess接口、arrayAccess的接口使用,arrayaccess接口_PHP教程的有价值信息。

本文目录一览:

为什么ArrayList实现RandomAccess接口?(arraylist报错)

为什么ArrayList实现RandomAccess接口?(arraylist报错)

ArrayList实现RandomAccess接口。RandomAccess接口没有方法。当我检查LinkedList它没有实现RandomAccess接口。

那么,在ArrayList实现的意义何在?

答案1

小编典典

没有方法的接口在Java中称为标记接口。

根据RandomAccess的JavaDoc:

List实现使用的标记接口,指示
它们支持快速(通常为恒定时间)随机访问。

有关更多信息,请检查两个JavaDoc页面。

http://docs.oracle.com/javase/6/docs/api/java/util/RandomAccess.html

http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

ArrayAccess接口介绍

ArrayAccess接口介绍

在 php5 中多了一系列新接口,在 haohappy 翻译的系列文章中,你可以了解到他们的应用,同时这些接口和一些实现的 class 被归为 standard php library(spl),在 php5 中加入了很多特性,使类的重载 (overloading) 得到进一步的加强,arrayaccess 的作用是使你的 class 看起来像一个数组 (php的数组),这点和 c# 的 index 特性很相似。

下面是 ArrayAccess 的定义:

interface ArrayAccess 
boolean offsetExists($index) 
mixed offsetGet($index) 
void offsetSet($index, $newvalue) 
void offsetUnset($index)
登录后复制

由于PHP的数组的强大,很多人在写 PHP 应用的时候经常将配置信息保存在一个数组里,于是可能在代码中到处都是 global,我们换种方式?

如以下代码:

<?php
//Configuration Class
class Configuration implements ArrayAccess {
    static private $config;
    private $configarray;
    private function __construct() {
        // init
        $this->configarray = array(
            "Binzy" => "Male",
            "Jasmin" => "Female"
        );
    }
    public static function instance() {
        //
        if (self::$config == null) {
            self::$config = new Configuration();
        }
        return self::$config;
    }
    function offsetExists($index) {
        return isset($this->configarray[$index]);
    }
    function offsetGet($index) {
        return $this->configarray[$index];
    }
    function offsetSet($index, $newvalue) {
        $this->configarray[$index] = $newvalue;
    }
    function offsetUnset($index) {
        unset($this->configarray[$index]);
    }
}
$config = Configuration::instance();
print $config["Binzy"];
?>
登录后复制

正如你所预料的,程序的输出是"Male",假如我们做下面那样的动作:

$config = Configuration::instance(); 
print $config["Binzy"]; 
$config[&#39;Jasmin&#39;] = "Binzy&#39;s Lover"; 
// config 2 
$config2 = Configuration::instance(); 
print $config2[&#39;Jasmin&#39;];
登录后复制

是的,也正如预料的,输出的将是Binzy''s Lover,也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装,最基本的工作就是封装,而封装能有效将变化置于内部,也就是说,当配置信息不再保存在一个 PHP 数组中的时候,是的,应用代码无需任何改变,可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。

ArrayAccess 在进一步完善中,因为现在是没有办法 count 的,虽然大多数情况并不影响我们的使用.

ArrayAccess接口介绍_PHP教程

ArrayAccess接口介绍_PHP教程

在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的系列文章中 你可以了解到他们的应用。同时这些接口和一些实现的 Class 被归为 Standard PHP Library(SPL)。在 PHP5 中加入了很多特性,使类的重载 (Overloading) 得到进一步的加强。ArrayAccess 的作用是使你的 Class 看起来像一个数组 (PHP的数组)。这点和 C# 的 Index 特性很相似。

下面是 ArrayAccess 的定义:

interface ArrayAccess
boolean offsetExists($index)
mixed offsetGet($index)
void offsetSet($index, $newvalue)
void offsetUnset($index)

由于PHP的数组的强大,很多人在写 PHP 应用的时候经常将配置信息保存在一个数组里。于是可能在代码中到处都是 global。我们换种方式?

如以下代码:

//Configuration Class
class Configuration implements ArrayAccess
{

static private $config;

private $configarray;

private function __construct()
{
// init
$this->configarray = array("Binzy"=>"Male", "Jasmin"=>"Female");
}

public static function instance()
{
//
if (self::$config == null)
{
self::$config = new Configuration();
}

return self::$config;
}

function offsetExists($index)
{
return isset($this->configarray[$index]);
}

function offsetGet($index) {
return $this->configarray[$index];
}

function offsetSet($index, $newvalue) {
$this->configarray[$index] = $newvalue;
}

function offsetUnset($index) {
unset($this->configarray[$index]);
}
}

$config = Configuration::instance();
print $config["Binzy"];


正如你所预料的,程序的输出是"Male"。
假如我们做下面那样的动作:

$config = Configuration::instance();
print $config["Binzy"];
$config[''Jasmin''] = "Binzy''s Lover";
// config 2
$config2 = Configuration::instance();
print $config2[''Jasmin''];

是的,也正如预料的,输出的将是Binzy''s Lover。
也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装。OO 的最基本的工作就是封装,而封装能有效将变化置于内部。也就是说,当配置信息不再保存在一个 PHP 数组中的时候,是的,应用代码无需任何改变。可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。:

ArrayAccess 在进一步完善中,因为现在是没有办法 count 的,虽然大多数情况并不影响我们的使用。

参考:
1. 《PHP5 Power Programming》
2. 《设计模式》
3. 《面向对象分析与设计》

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/631387.htmlTechArticle在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的系列文章中 你可以了解到他们的应用。同时这些接口和一些实现的 Class 被归为 Standard PHP L...

arrayAccess的接口使用,arrayaccess接口

arrayAccess的接口使用,arrayaccess接口

arrayAccess的接口使用,arrayaccess接口

<?<span>php
    </span><span>//</span><span>get the methods instance of ArrayAccess
    //get the properties instance of ArrayAccess</span>
    <span>$reflection</span> = <span>new</span> ReflectionClass(''ArrayAccess''<span>);
    </span><span>//</span><span>var_dump($reflection->getMethods());
    //var_dump($reflection->getProperties());</span>
    
    <span>class</span> dbTypes <span>implements</span><span> ArrayAccess{
        </span><span>private</span> <span>$dbtypes</span> = <span>array</span><span>();
        
        </span><span>//</span><span>判定是否存在</span>
        <span>public</span> <span>function</span> offsetExists(<span>$offset</span><span>){
            </span><span>return</span> <span>isset</span>(<span>$this</span>->dbtypes[<span>$offset</span>]) ? <span>true</span> : <span>false</span><span>;
        }
        </span><span>//</span><span>获取一个值</span>
        <span>public</span> <span>function</span> offsetGet(<span>$offset</span><span>){
            </span><span>if</span>(<span>$this</span>->offsetExists(<span>$offset</span><span>)){
                </span><span>return</span> <span>$this</span>->dbtypes[<span>$offset</span><span>];
            }</span><span>else</span><span>{
                </span><span>return</span> <span>null</span><span>;
            }
        }
        </span><span>//</span><span>设置一个值</span>
        <span>public</span> <span>function</span> offsetSet(<span>$offset</span>,<span>$value</span><span>){
                </span><span>$this</span>->dbtypes[<span>$offset</span>] = <span>$value</span><span>;
        }
        </span><span>//</span><span>删除一个值</span>
        <span>public</span> <span>function</span> offsetUnset(<span>$offset</span><span>){
            </span><span>unset</span>(<span>$this</span>->dbtypes[<span>$offset</span><span>]);
        }
    }
    
    </span><span>$types</span> = <span>new</span><span> dbTypes();
    </span><span>echo</span> <span>$types</span>[''nosql''<span>];
    
    
    
    </span>
登录后复制

 

arrayAccess的接口使用,arrayaccess接口_PHP教程

arrayAccess的接口使用,arrayaccess接口_PHP教程

arrayAccess的接口使用,arrayaccess接口

<?<span>php
    </span><span>//</span><span>get the methods instance of ArrayAccess
    //get the properties instance of ArrayAccess</span>
    <span>$reflection</span> = <span>new</span> ReflectionClass(''ArrayAccess''<span>);
    </span><span>//</span><span>var_dump($reflection->getMethods());
    //var_dump($reflection->getProperties());</span>
    
    <span>class</span> dbTypes <span>implements</span><span> ArrayAccess{
        </span><span>private</span> <span>$dbtypes</span> = <span>array</span><span>();
        
        </span><span>//</span><span>判定是否存在</span>
        <span>public</span> <span>function</span> offsetExists(<span>$offset</span><span>){
            </span><span>return</span> <span>isset</span>(<span>$this</span>->dbtypes[<span>$offset</span>]) ? <span>true</span> : <span>false</span><span>;
        }
        </span><span>//</span><span>获取一个值</span>
        <span>public</span> <span>function</span> offsetGet(<span>$offset</span><span>){
            </span><span>if</span>(<span>$this</span>->offsetExists(<span>$offset</span><span>)){
                </span><span>return</span> <span>$this</span>->dbtypes[<span>$offset</span><span>];
            }</span><span>else</span><span>{
                </span><span>return</span> <span>null</span><span>;
            }
        }
        </span><span>//</span><span>设置一个值</span>
        <span>public</span> <span>function</span> offsetSet(<span>$offset</span>,<span>$value</span><span>){
                </span><span>$this</span>->dbtypes[<span>$offset</span>] = <span>$value</span><span>;
        }
        </span><span>//</span><span>删除一个值</span>
        <span>public</span> <span>function</span> offsetUnset(<span>$offset</span><span>){
            </span><span>unset</span>(<span>$this</span>->dbtypes[<span>$offset</span><span>]);
        }
    }
    
    </span><span>$types</span> = <span>new</span><span> dbTypes();
    </span><span>echo</span> <span>$types</span>[''nosql''<span>];
    
    
    
    </span>
登录后复制

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/965028.htmlTechArticlearrayAccess的接口使用,arrayaccess接口 ? php // get the methods instance of ArrayAccess //get the properties instance of ArrayAccess $reflection = new ReflectionClass(''Arra...

关于为什么ArrayList实现RandomAccess接口?arraylist报错的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ArrayAccess接口介绍、ArrayAccess接口介绍_PHP教程、arrayAccess的接口使用,arrayaccess接口、arrayAccess的接口使用,arrayaccess接口_PHP教程等相关内容,可以在本站寻找。

本文标签: