circularidentitylist.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 138 行

JAVA
138
字号
/* * @(#)CircularIdentityList.java	1.5 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.java.swing.plaf.gtk;import java.util.*;/** * An circular linked list like data structure that uses identity for equality * testing. * * @version 1.5, 12/19/03 * @author Scott Violet */class CircularIdentityList implements Cloneable {    private Property property;    /**     * Sets a particular value.     */    public synchronized void set(Object key, Object value) {        if (property == null) {            property = new Property(key, value, null);        }        else {            Property p = property;            Property last = p;            do {                if (p.key == key) {                    p.value = value;                    property = p;                    return;                }                last = p;                p = p.next;            } while (p != property && p != null);            // not defined            if (value != null) {                if (p == null) {                    // Only one element                    p = property;                }                property = new Property(key, value, p);                last.next = property;            }        }    }    /**     * Returns the value currently being referenced.     */    public synchronized Object get() {        if (property == null) {            return null;        }        return property.value;    }    /**     * Returns the value for a specific key.     */    public synchronized Object get(Object key) {        if (property == null) {            return null;        }        Property p = property;        do {            if (p.key == key) {                return p.value;            }            p = p.next;        } while (p != property && p != null);        return null;    }    /**     * Advanced the list returning the next key. This will only return     * null if the list is empty.     */    public synchronized Object next() {        if (property == null) {            return null;        }        if (property.next == null) {            return property.key;        }        property = property.next;        return property.key;    }    public synchronized Object clone() {        try {            CircularIdentityList list = (CircularIdentityList)super.clone();            if (property != null) {                list.property = (Property)property.clone();                Property last = list.property;                while (last.next != null && last.next != property) {                    last.next = (Property)last.next.clone();                    last = last.next;                }                last.next = list.property;            }            return list;        } catch (CloneNotSupportedException cnse) {        }        return null;    }    static class Property implements Cloneable {        Object key;        Object value;        Property next;        Property(Object key, Object value, Property next) {            this.key = key;            this.value = value;            this.next = next;        }        public Object clone() {            try {                return super.clone();            } catch (CloneNotSupportedException cnse) {            }            return null;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?