- 浏览: 562653 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
package java.util; public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> { protected AbstractList() { } /** * 添加元素方法 */ public boolean add(E e) { add(size(), e); return true; } /** * 获取元素的抽象方法 */ abstract public E get(int index); /** * 根据下标设置元素的方法 */ public E set(int index, E element) { throw new UnsupportedOperationException(); } /** * 根据下标添加元素的方法 */ public void add(int index, E element) { throw new UnsupportedOperationException(); } /** * 根据下标删除元素的方法 */ public E remove(int index) { throw new UnsupportedOperationException(); } // Search Operations /** * 返回列表中某个元素第一次出现的索引位置的方法 */ public int indexOf(Object o) { ListIterator<E> e = listIterator(); if (o==null) { while (e.hasNext()) if (e.next()==null) return e.previousIndex(); } else { while (e.hasNext()) if (o.equals(e.next())) return e.previousIndex(); } return -1; } /** *返回列表中某个元素最后一次出现的索引位置的方法 */ public int lastIndexOf(Object o) { ListIterator<E> e = listIterator(size()); if (o==null) { while (e.hasPrevious()) if (e.previous()==null) return e.nextIndex(); } else { while (e.hasPrevious()) if (o.equals(e.previous())) return e.nextIndex(); } return -1; } /** * 清除列表中的所有元素 */ public void clear() { removeRange(0, size()); } /** * 从指定位置开始将Collection中的元素按迭代顺序加入到列表中 */ public boolean addAll(int index, Collection<? extends E> c) { boolean modified = false; Iterator<? extends E> e = c.iterator(); while (e.hasNext()) { add(index++, e.next()); modified = true; } return modified; } /** * 返回内部实现的迭代器类Itr */ public Iterator<E> iterator() { return new Itr(); } /** *继承ListIterator类的方法 */ public ListIterator<E> listIterator() { return listIterator(0); } /** * 继承ListIterator类的方法 */ public ListIterator<E> listIterator(final int index) { if (index<0 || index>size()) throw new IndexOutOfBoundsException("Index: "+index); return new ListItr(index); } /** * 私有的内部类,实现了自己的Itertor */ private class Itr implements Iterator<E> { /** *调用next方法返回的元素索引值 */ int cursor = 0; /** * 调用next方法或者previous方法时返回的索引值,当调用deleted方法时该值重新置-1 */ int lastRet = -1; /** * 列表的修改次数 */ int expectedModCount = modCount; public boolean hasNext() { return cursor != size(); } public E next() { checkForComodification(); try { E next = get(cursor); lastRet = cursor++; return next; } catch (IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } public void remove() { if (lastRet == -1) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet < cursor) cursor--; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException e) { throw new ConcurrentModificationException(); } } final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); } } /** * 私有的内部类,实现了自己的列表迭代器类 */ private class ListItr extends Itr implements ListIterator<E> { ListItr(int index) { cursor = index; } public boolean hasPrevious() { return cursor != 0; } public E previous() { checkForComodification(); try { int i = cursor - 1; E previous = get(i); lastRet = cursor = i; return previous; } catch (IndexOutOfBoundsException e) { checkForComodification(); throw new NoSuchElementException(); } } public int nextIndex() { return cursor; } public int previousIndex() { return cursor-1; } public void set(E e) { if (lastRet == -1) throw new IllegalStateException(); checkForComodification(); try { AbstractList.this.set(lastRet, e); expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } public void add(E e) { checkForComodification(); try { AbstractList.this.add(cursor++, e); lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } } } /** * 返回指定位置的列表视图 */ public List<E> subList(int fromIndex, int toIndex) { return (this instanceof RandomAccess ? new RandomAccessSubList<E>(this, fromIndex, toIndex) : new SubList<E>(this, fromIndex, toIndex)); } /** * 比较的方法 */ public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof List)) return false; ListIterator<E> e1 = listIterator(); ListIterator e2 = ((List) o).listIterator(); while(e1.hasNext() && e2.hasNext()) { E o1 = e1.next(); Object o2 = e2.next(); if (!(o1==null ? o2==null : o1.equals(o2))) return false; } return !(e1.hasNext() || e2.hasNext()); } /** * 重写的hashcode方法 */ public int hashCode() { int hashCode = 1; Iterator<E> i = iterator(); while (i.hasNext()) { E obj = i.next(); hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); } return hashCode; } /** *删除指定区间元素的方法 */ protected void removeRange(int fromIndex, int toIndex) { ListIterator<E> it = listIterator(fromIndex); for (int i=0, n=toIndex-fromIndex; i<n; i++) { it.next(); it.remove(); } } /** * 列表结构被修改的次数,比如列表的size变化或者打乱列表使得迭代结果不正确 */ protected transient int modCount = 0; } /** * 子列表类 */ class SubList<E> extends AbstractList<E> { private AbstractList<E> l; private int offset; private int size; private int expectedModCount; SubList(AbstractList<E> list, int fromIndex, int toIndex) { if (fromIndex < 0) throw new IndexOutOfBoundsException("fromIndex = " + fromIndex); if (toIndex > list.size()) throw new IndexOutOfBoundsException("toIndex = " + toIndex); if (fromIndex > toIndex) throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); l = list; offset = fromIndex; size = toIndex - fromIndex; expectedModCount = l.modCount; } public E set(int index, E element) { rangeCheck(index); checkForComodification(); return l.set(index+offset, element); } public E get(int index) { rangeCheck(index); checkForComodification(); return l.get(index+offset); } public int size() { checkForComodification(); return size; } public void add(int index, E element) { if (index<0 || index>size) throw new IndexOutOfBoundsException(); checkForComodification(); l.add(index+offset, element); expectedModCount = l.modCount; size++; modCount++; } public E remove(int index) { rangeCheck(index); checkForComodification(); E result = l.remove(index+offset); expectedModCount = l.modCount; size--; modCount++; return result; } protected void removeRange(int fromIndex, int toIndex) { checkForComodification(); l.removeRange(fromIndex+offset, toIndex+offset); expectedModCount = l.modCount; size -= (toIndex-fromIndex); modCount++; } public boolean addAll(Collection<? extends E> c) { return addAll(size, c); } public boolean addAll(int index, Collection<? extends E> c) { if (index<0 || index>size) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); int cSize = c.size(); if (cSize==0) return false; checkForComodification(); l.addAll(offset+index, c); expectedModCount = l.modCount; size += cSize; modCount++; return true; } public Iterator<E> iterator() { return listIterator(); } public ListIterator<E> listIterator(final int index) { checkForComodification(); if (index<0 || index>size) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); return new ListIterator<E>() { private ListIterator<E> i = l.listIterator(index+offset); public boolean hasNext() { return nextIndex() < size; } public E next() { if (hasNext()) return i.next(); else throw new NoSuchElementException(); } public boolean hasPrevious() { return previousIndex() >= 0; } public E previous() { if (hasPrevious()) return i.previous(); else throw new NoSuchElementException(); } public int nextIndex() { return i.nextIndex() - offset; } public int previousIndex() { return i.previousIndex() - offset; } public void remove() { i.remove(); expectedModCount = l.modCount; size--; modCount++; } public void set(E e) { i.set(e); } public void add(E e) { i.add(e); expectedModCount = l.modCount; size++; modCount++; } }; } public List<E> subList(int fromIndex, int toIndex) { return new SubList<E>(this, fromIndex, toIndex); } private void rangeCheck(int index) { if (index<0 || index>=size) throw new IndexOutOfBoundsException("Index: "+index+ ",Size: "+size); } private void checkForComodification() { if (l.modCount != expectedModCount) throw new ConcurrentModificationException(); } } /** * 具有随机访问性质的子列表类 */ class RandomAccessSubList<E> extends SubList<E> implements RandomAccess { RandomAccessSubList(AbstractList<E> list, int fromIndex, int toIndex) { super(list, fromIndex, toIndex); } public List<E> subList(int fromIndex, int toIndex) { return new RandomAccessSubList<E>(this, fromIndex, toIndex); } }
发表评论
-
熔岩的相关文章收藏
2011-02-20 21:57 1361HttpClient4 Post XML到一个服务器上 纯J ... -
我新弄的博客和论坛+新浪微博
2011-02-01 00:05 1723主博客是:http://www.liuxinglany ... -
Java编程思想 (收藏)
2011-01-07 15:34 9481、面向对象的特性 2、内存分配 3、 ... -
Java解惑系列(收藏)
2011-01-07 15:30 11491.1 java解惑你知多少(一) 1.2 jav ... -
2010 iData Forum 演讲幻灯片
2010-12-25 21:44 10032010年iData Forum数据库大会顺利结束,在 ... -
2010年6月的好文推荐
2010-12-20 20:39 855转自:人云亦云 最近发现一个非常不错的博客,叫dbthi ... -
JAVA通过JNI调用本地C语言方法
2010-12-19 20:49 763Java特性深受人们喜爱, ... -
java集合类比较
2010-12-19 20:49 1245Vector(转者注:现在Ve ... -
java对各种文件的操作详解(转)
2010-12-19 20:31 792http://blog.csdn.net/Java2King/ ... -
从一个http请求的详细过程---理解计算机网络
2010-12-18 13:58 1461http://duanple.blog.163.com/b ... -
(转)学习:一个并发的Cache
2010-12-17 17:11 988public class Memoizer implem ... -
Groovy是怎么实现createArray的
2010-12-16 19:57 720Groovy是一个基于 Java虚拟机的敏捷 动态语言。构 ... -
24款较经典的Page翻页分页css代码
2010-12-12 17:52 744<!DOCTYPE html PUBLIC &qu ... -
比较优秀的值得学习的J2EE开源项目
2010-12-12 12:53 984这篇文章写在我研究J2 ... -
J2EE的部分jar的作用
2010-12-05 10:44 1068来自:深沉的船 activation.jar:与javaMa ... -
Java的多线程Socket通信
2010-12-04 21:21 858转:http://wangtong40.iteye.com/b ... -
Java的单线程Socket通信
2010-12-04 21:21 873package com.wangtong.networ ... -
Servlet 3.0 实战:异步 Servlet 与 Comet 风格应用程序
2010-12-04 21:19 908转自http://www.ibm.com/develope ... -
高效编程之欲擒故纵
2010-12-04 13:36 800转:http://www.aqee.net/2010/11/3 ... -
架构师给程序员的一封信
2010-12-04 13:35 814转:http://www.aqee.net/2010/ ...
相关推荐
### ArrayList源代码解析 在Java集合框架中,`ArrayList`是一个非常重要的类,它实现了`List`接口,并提供了基于动态数组的数据结构。本篇将详细分析`ArrayList`的源码,帮助读者理解其内部实现机制。 #### 类定义...
Java源代码是学习Java编程语言的关键资源,它揭示了Java平台内部的工作原理和设计思想。通过对Java类库的源码进行阅读和分析,开发者可以深入理解语言机制,提高编程技能,以及解决实际问题的能力。以下将详细介绍...
`Vector`类位于`java.util`包中,它是`AbstractList`和`Serializable`接口的实现,同时也实现了`Cloneable`接口。这意味着`Vector`可以被序列化,克隆,并且具有列表的所有操作。 要找到`Vector`中的最大元素,我们...
- 在Java集合框架中,许多接口的实现类都基于抽象类,如ArrayList和LinkedList都继承自AbstractList抽象类。 通过理解和熟练运用抽象类,开发者可以更好地设计和实现面向对象的程序,提高代码的复用性和可维护性。...
此外,Java的`java.util.ArrayList`和`java.util.LinkedList`都是抽象类`java.util.AbstractList`的子类,它们都实现了`AbstractList`提供的接口和部分方法,但各自的实现方式不同,这体现了抽象类在代码结构和复用...
例如,`ArrayList`和`LinkedList`都继承自Java的`AbstractList`抽象类,它们共享了一些通用的列表操作。 **多态(Polymorphism)** 是面向对象编程的三大特性之一,意味着同一种行为在不同类中可能有不同的表现形式...
7. **JDK中的应用**:Java集合框架中的`AbstractList`, `AbstractSet`, `AbstractMap`等都是抽象类,它们提供了部分实现,子类只需实现剩余的方法即可。这大大简化了开发过程,提高了代码复用。 总之,抽象类在Java...
抽象类主要用于代码复用,通过继承抽象类,子类可以获得父类的成员变量和方法实现。例如,`java.util.AbstractList`是集合框架中的一个抽象类,提供了列表操作的部分实现,如`ArrayList`就是基于它进行扩展的。 在...
本文章主要抽取了 Java Collections Framework 中的Collection 接口、List 接口、AbstractCollection 抽象类、AbstractList 抽象类和具体的ArrayList 的实现纵向研究了Java Collections Framework 中...源代码的研究。
`AbstractCollection`、`AbstractList`、`AbstractMap`和`AbstractSet`是集合框架中的抽象类,它们为特定类型的集合提供了基本操作的骨架实现。例如,`AbstractList`为实现列表接口(如ArrayList和LinkedList)提供...
例如,可以通过实现`List`接口创建一个新的列表实现,或者通过继承`AbstractList`、`AbstractSet`等抽象类来减少编码工作。此外,`Collections`类提供了许多静态方法,如排序、复制、填充等,作为通用的算法,可以...
这样的工具可以自动解析SQL创建语句,生成相应的Java源代码,极大地提高了开发效率。通过输入SQL脚本或连接到数据库获取表结构,工具能够生成包含字段名、数据类型和注释的Java实体类。 3. **使用步骤** - **准备...
它继承自`AbstractList`并实现了`List`接口。与ArrayList相比,Vector是线程安全的,但性能较低,因为它的每个操作都需要同步。 - `Stack`类:是`Vector`的一个子类,实现了一个后进先出(LIFO)的数据结构,即堆栈...
本文将深入探讨`AbstractList`类的重要性和使用场景,帮助初学者掌握如何利用`AbstractList`来创建自己的`List`实现。 #### 一、AbstractList简介 `AbstractList`是一个抽象类,位于`java.util`包中。它是`List`...
本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型代码,为了简化问题,所以我们还是讨论1.4版本的代码。 集合类的根接口Collection Collection接口是所有集合类的根类型。它的一个主要的...
此外,源代码中可能还包括测试类,用于验证线性表操作的正确性。测试类通常会创建一个线性表实例,然后执行插入、删除、查找等操作,并打印结果,以确保程序按照预期工作。 总之,这个“java编写的线性表”项目为...
Java代码开发文档旨在提供一套标准和最佳实践,以确保代码的可读性、可维护性和团队协作效率。本文档将详细阐述Java编程中的命名规范,这是编写清晰、一致且易于理解的代码的基础。 1. 介绍/说明 Java编程规范是...
5. **javac与Java命令**:`javac`用于编译Java源代码,而`java`命令则用于运行已编译的Java类。 6. **this关键字**:在子类构造函数中,`this`可以调用同一类的其他构造函数,而不是基类的构造函数。若要调用基类...
此外,AbstractCollection和AbstractList等抽象类为自定义集合类提供了便利的基类。 在实际开发中,选择合适的集合类至关重要。例如,如果需要保持元素顺序且频繁进行遍历,ArrayList可能是最佳选择;如果关注的是...