- 浏览: 182525 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
工作中需要用到弱引用的集合和列表.网上搜集了点资料,自己整理下发出来备份.
WeakHashSet是模仿HashSet的实现方式,使用WeakHashMap实现的.
WeakArrayList是修改自org.arakhne.util.ref下的WeakArrayList.
SpeedyKit.copyOf方法是1.6中Arrays下同名方法.我用的1.5,需要把此方法拷贝出来.
import java.util.AbstractSet; import java.util.Collection; import java.util.Iterator; import java.util.Set; import java.util.WeakHashMap; /** * 参照{@link java.util.HashSet}实现的WeakHashSet.详细介绍参看{@link java.util.Set}和 * {@link java.util.WeakHashMap}功能<br> * */ public class WeakHashSet<E> extends AbstractSet<E> implements Set<E> { private transient WeakHashMap<E, Object> map; private static final Object PRESENT = new Object(); public WeakHashSet() { this.map = new WeakHashMap<E, Object>(); } public WeakHashSet(Collection<? extends E> c) { this.map = new WeakHashMap<E, Object>(Math.max( (int) (c.size() / .75f) + 1, 16)); this.addAll(c); } public WeakHashSet(int initialCapacity, float loadFactor) { this.map = new WeakHashMap<E, Object>(initialCapacity, loadFactor); } public WeakHashSet(int initialCapacity) { this.map = new WeakHashMap<E, Object>(initialCapacity); } public Iterator<E> iterator() { return this.map.keySet().iterator(); } public int size() { return this.map.size(); } @Override public boolean isEmpty() { return this.map.isEmpty(); } @Override public boolean contains(Object o) { return this.map.containsKey(o); } @Override public boolean add(E o) { return this.map.put(o, WeakHashSet.PRESENT) == null; } @Override public boolean remove(Object o) { return this.map.remove(o) == WeakHashSet.PRESENT; } @Override public void clear() { this.map.clear(); } }
import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; import java.util.AbstractList; import java.util.Collection; /** * 弱引用列表 <br> * */ public class WeakArrayList<T> extends AbstractList<T> { private static final long serialVersionUID = 2601162363164961860L; private static final Object NULL_VALUE = new Object(); private final transient ReferenceQueue<T> queue; private Object[] data; private int size; private boolean enquedElement; @SuppressWarnings("unchecked") private static <T> T maskNull(T value) { return (T) (value == null ? WeakArrayList.NULL_VALUE : value); } private static <T> T unmaskNull(T value) { return (value == WeakArrayList.NULL_VALUE ? null : value); } public WeakArrayList(int initialCapacity) { this.queue = new ReferenceQueue<T>(); this.enquedElement = false; if (initialCapacity < 0) { throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity); } this.data = new Object[initialCapacity]; this.size = 0; } public WeakArrayList() { this(10); } public WeakArrayList(Collection<? extends T> c) { this.queue = new ReferenceQueue<T>(); this.enquedElement = false; this.data = new Object[c.size()]; this.size = this.data.length; int i = 0; for (T t : c) { this.data[i] = this.createRef(t); ++i; } } @SuppressWarnings("unchecked") public String toString() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < this.size; ++i) { Object obj; Reference<T> ref = (Reference<T>) this.data[i]; if (this.data[i] == null) { obj = null; } else { obj = ref.get(); } buffer.append('{'); buffer.append(obj == null ? null : obj.toString()); buffer.append('}'); } return buffer.toString(); } @SuppressWarnings("unchecked") private Reference<T> createRef(T obj) { return new WeakReference(WeakArrayList.maskNull(obj), this.queue); } public void ensureCapacity(int minCapacity) { this.modCount += 1; int oldCapacity = this.data.length; if (minCapacity > oldCapacity) { Object[] oldData = this.data; int newCapacity = oldCapacity * 3 / 2 + 1; if (newCapacity < minCapacity) { newCapacity = minCapacity; } this.data = SpeedyKit.copyOf(oldData, newCapacity); } } public void trimToSize() { this.modCount += 1; int oldCapacity = this.data.length; if (this.size < oldCapacity) { this.data = SpeedyKit.copyOf(this.data, this.size); } } @SuppressWarnings("unchecked") public int expurge() { int j; while (this.queue.poll() != null) { this.enquedElement = true; } if (this.enquedElement) { j = 0; for (int i = 0; i < this.size; ++i) { Reference<T> ref = (Reference<T>) this.data[i]; if (ref == null || ref.isEnqueued() || ref.get() == null) { if (ref != null) { ref.clear(); } this.data[i] = null; } else { if (i != j) { this.data[j] = this.data[i]; this.data[i] = null; } ++j; } } this.enquedElement = false; } else { j = this.size; } while (this.queue.poll() != null) { this.enquedElement = true; } this.size = j; return this.size; } protected void assertRange(int index, boolean allowLast) { int csize = this.expurge(); if (index < 0) { throw new IndexOutOfBoundsException("invalid negative value: " + Integer.toString(index)); } if (allowLast && index > csize) { throw new IndexOutOfBoundsException("index>" + csize + ": " + Integer.toString(index)); } if (!allowLast && index >= csize) { throw new IndexOutOfBoundsException("index>=" + csize + ": " + Integer.toString(index)); } } public int size() { return this.expurge(); } @SuppressWarnings("unchecked") public T get(int index) { Object value; do { this.assertRange(index, false); value = ((Reference<T>) this.data[index]).get(); } while (value == null); return (T) WeakArrayList.unmaskNull(value); } @SuppressWarnings("unchecked") public T set(int index, T element) { Object oldValue; Reference<T> ref; do { this.assertRange(index, false); ref = (Reference<T>) this.data[index]; oldValue = ref.get(); } while (oldValue == null); ref.clear(); this.data[index] = this.createRef(element); this.modCount += 1; return (T) WeakArrayList.unmaskNull(oldValue); } public void add(int index, T element) { this.assertRange(index, true); this.ensureCapacity(this.size + 1); System.arraycopy(this.data, index, this.data, index + 1, this.size - index); this.data[index] = this.createRef(element); this.size += 1; this.modCount += 1; } @SuppressWarnings("unchecked") public T remove(int index) { Object oldValue; Reference<T> ref; do { this.assertRange(index, false); ref = (Reference<T>) this.data[index]; oldValue = ref.get(); } while (oldValue == null); ref.clear(); System.arraycopy(this.data, index + 1, this.data, index, this.size - index - 1); this.data[(this.size - 1)] = null; this.size -= 1; this.modCount += 1; return (T) WeakArrayList.unmaskNull(oldValue); } public static void main(String[] args) { Object a = new Object(); WeakArrayList<Object> list = new WeakArrayList<Object>(); for (int i = 0; i < 100000; i++) { list.add(a); } int size = list.size(); System.out.println(size); a = null; while (list.size() == size) { System.gc(); } System.out.println(list.size()); } }
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1324为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1232没什么,就是一个简单的打印,留作存档 publi ... -
httpclient4的封装
2012-01-06 15:11 4633没什么特别的,自己封装着用的. package cpcns. ... -
h2的baseDir
2011-11-11 16:38 1462使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5116修改web项目的.settings下的org.eclipse. ... -
获取汉字的五笔,全拼和双拼的工具类
2011-10-10 15:51 2382如题,项目需要,首先可用的自然是pinyin4j. 在不考虑 ... -
五笔86和汉字对照表
2011-10-09 16:53 2529项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1385自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6812一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2284一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
来,让我们一起画个印章吧
2011-07-04 14:52 4510这几天发现有哥们在介 ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2675最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 2006这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1780/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1723这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1354用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1788项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3467这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1320/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16964工作原因,需要使用poi来读取excel中的所有内容. 其他 ...
相关推荐
在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的数据结构,它们...在实际开发中,还可以结合ArrayList和LinkedList的特性,利用Java集合框架中的其他数据结构,如HashSet或HashMap,来优化代码性能。
在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...
Java中的容器类是Java...对于内存效率和弱引用的需求,WeakHashMap是一个不错的选择。在实际应用中,通常推荐使用非同步的实现,如ArrayList和HashMap,因为它们的性能更高,然后根据需要在多线程场景下添加同步机制。
在Java编程语言中,ArrayList、LinkedList、HashMap和HashSet是四个非常重要的集合类,它们分别代表了不同类型的数据结构。这篇文章将深入探讨这些类的源码,以帮助我们更好地理解和运用它们。 首先,ArrayList是一...
在Java集合框架中,Vector、ArrayList和LinkedList都是List接口的实现,它们提供了有序集合的功能,允许根据位置进行元素的添加、删除和查找。然而,它们在设计和性能上有着显著的区别。 首先,Vector是Java早期...
Java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用。强引用是通常的引用,只要强引用还存在,对象就不会被垃圾回收器回收;软引用用于描述一些有用但非必需的对象,只在内存不足时才会被回收;弱引用描述...
集合则提供了不重复元素的存储,包括接口如Set和List,以及其实现类如HashSet和ArrayList。 书中还会涵盖排序和查找算法,例如冒泡排序、选择排序、插入排序、快速排序、归并排序等,这些是所有程序员都应掌握的...
Java 集合类可以用于存储和操作大量数据,包括 ArrayList、LinkedList、HashSet 等。 * ArrayList:ArrayList 是一种可变长的数组,能够存储大量数据。 * LinkedList:LinkedList 是一种链式数据结构,能够提供高效...
本篇文章将详细讲解Java中的基本集合类ArrayList、LinkedList和Vector,以及HashSet和TreeSet。 1. ArrayList ArrayList是基于动态数组实现的集合类,它允许存储重复元素。默认初始容量为10,当添加元素超过容量时...
本测试着重探讨了Java集合类中的Set接口实现类(如HashSet)以及List接口实现类(如ArrayList和LinkedList)在进行增、删、改、查操作时的性能差异。 首先,我们来看ArrayList。ArrayList是一个基于数组实现的列表...
此外,PPT可能还会涵盖数组和集合框架,数组是存储固定数量相同类型元素的数据结构,而集合框架(如ArrayList、LinkedList、HashSet和HashMap等)提供了更灵活的数据存储和操作方式。 文件I/O操作也是基础教程的一...
* 软引用和弱引用是Java中的两个引用类型,用于解决内存泄漏的问题 六、Java学习方法和技巧 1. 按照专题进行学习 * 将学习内容按专题进行分类,例如Java基础、算法与编程、数据库等 2. 由基础到高级,由浅入深 ...
Java语言提供了集合框架,包括ArrayList类、LinkedList类、HashSet类和TreeSet类等。Java集合框架提供了多种数据结构,允许开发者存储和操作大量数据。 Java基础知识是Java开发人员必须掌握的基本技能。掌握Java...
9. **集合框架**:学习ArrayList、LinkedList、HashSet、HashMap等集合类的用法,以及泛型的概念。 10. **多线程**:理解并发编程的基础,包括线程的创建(通过Thread类和实现Runnable接口),线程同步...
在实验中,我们使用了ArrayList和LinkedList这两个实现类。ArrayList基于动态数组,随机访问速度快,但在插入和删除元素时,特别是中间位置,效率较低。LinkedList则基于双向链表,插入和删除速度快,但随机访问慢。...
List接口的典型实现包括ArrayList和Vector,前者基于数组,后者在内部实现上与ArrayList相似,但提供了线程同步功能。Set接口的实现包括HashSet、TreeSet和LinkedHashSet,分别基于哈希表、二叉树和HashMap。Map接口...
Java引用类型分为强引用、软引用、弱引用和虚引用。强引用是常规引用,不会被GC回收;软引用是指对象还有用但非必须;弱引用的对象是可回收的;虚引用是对象回收跟踪机制。 GC分代收集算法与分区收集算法不同。分代...
Collection接口是所有单值容器的超接口,它的子接口有List(有序、可重复元素,如ArrayList和LinkedList)和Set(无序、不可重复元素,如HashSet和TreeSet)。List接口允许通过索引访问元素,并支持添加、删除和修改...
例如,集合框架是Java编程中非常重要的部分,它包括了List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口和实现,这些容器类帮助我们组织和管理数据。 在实际开发中,...
- Java中有四种引用类型:强引用、软引用、弱引用和虚引用。 - 强引用不会被垃圾回收机制回收;软引用仅在内存不足时才会被回收;弱引用一旦可达性分析完成后即被回收;虚引用则是为了追踪对象被垃圾回收的活动。 ...