/** * Դ�������ƣ�FastFindArrayList.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.core * ����˵����$desc * ����ĵ��� * ���ߣ���Ҷ�� */ package com.hundsun.ares.studio.core.service; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * @author gongyf * */ public class FastFindArrayList<K, E> extends ArrayList<E> { /** * */ private static final long serialVersionUID = 1202420129062602544L; private IKeyProvider<K, E> keyProvider; private Map<K, Integer > map; /** * */ public FastFindArrayList(IKeyProvider<K, E> keyProvider) { this.keyProvider = keyProvider; } /* (non-Javadoc) * @see java.util.ArrayList#trimToSize() */ @Override public void trimToSize() { didChange(); super.trimToSize(); } /* (non-Javadoc) * @see java.util.ArrayList#set(int, java.lang.Object) */ @Override public E set(int index, E element) { didChange(); return super.set(index, element); } /* (non-Javadoc) * @see java.util.ArrayList#add(java.lang.Object) */ @Override public boolean add(E e) { didChange(); return super.add(e); } /* (non-Javadoc) * @see java.util.ArrayList#add(int, java.lang.Object) */ @Override public void add(int index, E element) { didChange(); super.add(index, element); } /* (non-Javadoc) * @see java.util.ArrayList#remove(int) */ @Override public E remove(int index) { didChange(); return super.remove(index); } /* (non-Javadoc) * @see java.util.ArrayList#remove(java.lang.Object) */ @Override public boolean remove(Object o) { didChange(); return super.remove(o); } /* (non-Javadoc) * @see java.util.ArrayList#addAll(java.util.Collection) */ @Override public boolean addAll(Collection<? extends E> c) { didChange(); return super.addAll(c); } /* (non-Javadoc) * @see java.util.AbstractCollection#removeAll(java.util.Collection) */ @Override public boolean removeAll(Collection<?> c) { didChange(); return super.removeAll(c); } /* (non-Javadoc) * @see java.util.AbstractCollection#retainAll(java.util.Collection) */ @Override public boolean retainAll(Collection<?> c) { didChange(); return super.retainAll(c); } /* (non-Javadoc) * @see java.util.ArrayList#addAll(int, java.util.Collection) */ @Override public boolean addAll(int index, Collection<? extends E> c) { didChange(); return super.addAll(index, c); } /* (non-Javadoc) * @see java.util.ArrayList#clear() */ @Override public void clear() { didChange(); super.clear(); } private void didChange() { map = null; } /** * ���ٲ��Ҷ��� * @param key * @return */ public E find(K key) { if (map == null) { map = new HashMap<K, Integer>(); for (int i = 0; i < size(); i++) { E e = get(i); K k = keyProvider.getKey(e); map.put(k, i); } } return get(map.get(key)); } }