hybriddictionary.cs

来自「没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没」· CS 代码 · 共 279 行

CS
279
字号
/* * HybridDictionary.cs - Implementation of *		"System.Collections.Specialized.HybridDictionary". * * Copyright (C) 2002  Southern Storm Software, Pty Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */namespace System.Collections.Specialized{#if !ECMA_COMPATusing System;using System.Collections;using System.Globalization;public class HybridDictionary : IDictionary, ICollection, IEnumerable{	// Internal state.  The object starts off as a list dictionary	// and then switches to a hash table when the number of elements	// exceeds "SwitchOverSize".	private ListDictionary list;	private Hashtable hash;	private bool caseInsensitive;	// The size at which we switch over.	private const int SwitchOverSize = 8;	// Constructors.	public HybridDictionary() : this(0, false) {}	public HybridDictionary(bool caseInsensitive)			: this(0, caseInsensitive) {}	public HybridDictionary(int initialSize)			: this(initialSize, false) {}	public HybridDictionary(int initialSize, bool caseInsensitive)			{				this.caseInsensitive = caseInsensitive;				if(initialSize > SwitchOverSize)				{					SwitchOver(initialSize);				}				else				{					list = new ListDictionary();				}			}	// Switch over to the hash table implementation.	private void SwitchOver(int size)			{				if(caseInsensitive)				{					hash = new Hashtable						(size, new CaseInsensitiveHashCodeProvider								(CultureInfo.InvariantCulture),						 new CaseInsensitiveComparer								(CultureInfo.InvariantCulture));				}				else				{					hash = new Hashtable(size);				}				if(list != null)				{					IDictionaryEnumerator e = list.GetEnumerator();					while(e.MoveNext())					{						hash.Add(e.Key, e.Value);					}					list = null;				}			}	// Implement the ICollection interface.	public void CopyTo(Array array, int index)			{				if(hash != null)				{					hash.CopyTo(array, index);				}				else				{					list.CopyTo(array, index);				}			}	public int Count			{				get				{					if(hash != null)					{						return hash.Count;					}					else					{						return list.Count;					}				}			}	public bool IsSynchronized			{				get				{					return false;				}			}	public Object SyncRoot			{				get				{					return this;				}			}	// Implement the IDictionary interface.	public void Add(Object key, Object value)			{				if(hash != null)				{					hash.Add(key, value);				}				else if(list.Count < SwitchOverSize)				{					list.Add(key, value);				}				else				{					SwitchOver(SwitchOverSize + 1);					hash.Add(key, value);				}			}	public void Clear()			{				if(hash != null)				{					hash.Clear();					hash = null;					list = new ListDictionary();				}				else if(list != null)				{					list.Clear();				}			}	public bool Contains(Object key)			{				if(hash != null)				{					return hash.Contains(key);				}				else				{					return list.Contains(key);				}			}	public IDictionaryEnumerator GetEnumerator()			{				if(hash != null)				{					return hash.GetEnumerator();				}				else				{					return list.GetEnumerator();				}			}	public void Remove(Object key)			{				if(hash != null)				{					hash.Remove(key);				}				else				{					list.Remove(key);				}			}	public bool IsFixedSize			{				get				{					return false;				}			}	public bool IsReadOnly			{				get				{					return false;				}			}	public Object this[Object key]			{				get				{					if(hash != null)					{						return hash[key];					}					else					{						return list[key];					}				}				set				{					if(hash != null)					{						hash[key] = value;					}					else					{						list[key] = value;					}				}			}	public ICollection Keys			{				get				{					if(hash != null)					{						return hash.Keys;					}					else					{						return list.Keys;					}				}			}	public ICollection Values			{				get				{					if(hash != null)					{						return hash.Values;					}					else					{						return list.Values;					}				}			}	// Implement the IEnumerable interface.	IEnumerator IEnumerable.GetEnumerator()			{				if(hash != null)				{					return ((IEnumerable)hash).GetEnumerator();				}				else				{					return ((IEnumerable)list).GetEnumerator();				}			}}; // class HybridDictionary#endif // !ECMA_COMPAT}; // namespace System.Collections.Specialized

⌨️ 快捷键说明

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