- 浏览: 55607 次
- 性别:
- 来自: 深圳
最新评论
-
sdm_seven:
吊 解决了我的问题
jboss5.1启动错误:java.lang.IllegalArgumentException: Wrong arguments. -
mycream:
吖的,最近发现这招不太灵了。因为项目比较赶,也没细看是什么原因 ...
端口占用解决方案 Windows xp -
xiao2004:
定义一个progn就完了。 (defun move ( ...
Lisp 语言学习--if 语句有问题
在看 JDK 1.6 的源码,用以补习自己的 Java 基础。
java.util 包中包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
在这里对 List 进行一个小结。
在接口定义中描述为:
简单的说 List 的特性:有序,允许重复元素,实现迭代器。
下面看具体的实现类,包括
Vector
Stack
ArrayList
LinkedList
ArrayDeque
Vector 和 Stack 是遗留的 collection 类。Vector 的所有方法都标识有 synchronized 以保证其线程同步的特性。
Stack 继承至 Vector 并添加了堆栈相关的特性(pop, push, peek)。因为其继承关系,其所有方法也是线程安全的。
ArrayList 是在 JDK 1.2 中对数据结构相关的工具类重新抽象整理的结果,在功能上与 Vector 完全一至,但去除了对线程安全的保证。
不过可以通过
来实现线程安全。故在代码中应该优先考虑使用 ArrayList 而非 Vector。
ArrayList 使用数组的形式实现数据存储,在添加数据的过程中会按照 (size * 3 )/2 + 1 的规则自动扩充。对比 Vector,Vector 可设置一个自增量,在需要扩充时自动增加自增量大小的空间或自动增大到原大小的一倍(自增量设置为0或小于0时)。
LinkedList 使用内部类的形式存储数据,失去了 ArrayList 随机访问数据的特性(可随机访问的列表会实现标识接口 RandomAccess)。LinkedList 实现了 Queue 和 Deque 接口,使其实现了队列及双向队列的特性。但在 JDK 1.6 版本之后,建议优先使用 ArrayDeque 来实现队列和堆栈,以获得更高的运行时效率。
在数据量非常大的时候,可以使用 LinkedList 以获得平衡的数据添加效率。因为 LinkedList 不需要去重新开辟新的 array 空间。(add at 2011-03-31)
以上列表的实现都可以插入 null,但这一操作是不被推荐的。因为在一些方法中,null 会用作特殊用途。如队列(Queue),pop()方法返回 null 表示队列为空。
ArrayDeque 是在 JDK 1.6 中引入的新类。此类实现了 List, Deque 接口,是一个双向队列实现。在此队列中使用数组存储数据,使用两个指针记录列队的头尾以实现循环队列。因为是循环队列的实现,因此该队列牺牲了随机访问的特性而节约了空间的开销。但其访问效率在 LinkedList 之上,在 JDK 文档中被推荐代替 LinkedList 和 Stack 类。
========
一些好玩的测试:
java.util 包中包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
在这里对 List 进行一个小结。
在接口定义中描述为:
引用
有序的 collection (也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。……
简单的说 List 的特性:有序,允许重复元素,实现迭代器。
下面看具体的实现类,包括
Vector
Stack
ArrayList
LinkedList
ArrayDeque
Vector 和 Stack 是遗留的 collection 类。Vector 的所有方法都标识有 synchronized 以保证其线程同步的特性。
Stack 继承至 Vector 并添加了堆栈相关的特性(pop, push, peek)。因为其继承关系,其所有方法也是线程安全的。
ArrayList 是在 JDK 1.2 中对数据结构相关的工具类重新抽象整理的结果,在功能上与 Vector 完全一至,但去除了对线程安全的保证。
不过可以通过
List list = Collections.synchronizedList(new ArrayList(...));
来实现线程安全。故在代码中应该优先考虑使用 ArrayList 而非 Vector。
ArrayList 使用数组的形式实现数据存储,在添加数据的过程中会按照 (size * 3 )/2 + 1 的规则自动扩充。对比 Vector,Vector 可设置一个自增量,在需要扩充时自动增加自增量大小的空间或自动增大到原大小的一倍(自增量设置为0或小于0时)。
LinkedList 使用内部类的形式存储数据,失去了 ArrayList 随机访问数据的特性(可随机访问的列表会实现标识接口 RandomAccess)。LinkedList 实现了 Queue 和 Deque 接口,使其实现了队列及双向队列的特性。但在 JDK 1.6 版本之后,建议优先使用 ArrayDeque 来实现队列和堆栈,以获得更高的运行时效率。
在数据量非常大的时候,可以使用 LinkedList 以获得平衡的数据添加效率。因为 LinkedList 不需要去重新开辟新的 array 空间。(add at 2011-03-31)
以上列表的实现都可以插入 null,但这一操作是不被推荐的。因为在一些方法中,null 会用作特殊用途。如队列(Queue),pop()方法返回 null 表示队列为空。
ArrayDeque 是在 JDK 1.6 中引入的新类。此类实现了 List, Deque 接口,是一个双向队列实现。在此队列中使用数组存储数据,使用两个指针记录列队的头尾以实现循环队列。因为是循环队列的实现,因此该队列牺牲了随机访问的特性而节约了空间的开销。但其访问效率在 LinkedList 之上,在 JDK 文档中被推荐代替 LinkedList 和 Stack 类。
========
一些好玩的测试:
public void testHashCode() { List list = new ArrayList(); System.out.println("hashcode:" + list.hashCode()); // hashcode:1 list.add(null); System.out.println("hashcode:" + list.hashCode()); // hashcode:31 list.add(null); System.out.println("hashcode:" + list.hashCode()); // hashcode:961 }
public void testTime() { int N = 100000; List<String> arrayList = new ArrayList<String>(N); List<String> linkedList = new LinkedList<String>(); for (int i = 0; i < N; i++) { arrayList.add("" + i); linkedList.add("" + i); } { Iterator<String> it = arrayList.iterator(); Date start = new Date(); StringBuffer sb = new StringBuffer(); while (it.hasNext()) { sb.append(it.next()); } Date end = new Date(); System.out.println("\ntime for arrayList used iterator:" + (end.getTime() - start.getTime())); start = new Date(); sb = new StringBuffer(); for (int i = 0; i < arrayList.size(); i++) { sb.append(arrayList.get(i)); } end = new Date(); System.out.println("\ntime for arrayList used for loop:" + (end.getTime() - start.getTime())); } { Iterator<String> it = linkedList.iterator(); Date start = new Date(); StringBuffer sb = new StringBuffer(); while (it.hasNext()) { sb.append(it.next()); } Date end = new Date(); System.out.println("\ntime for linkedList used iterator:" + (end.getTime() - start.getTime())); start = new Date(); sb = new StringBuffer(); for (int i = 0; i < linkedList.size(); i++) { sb.append(linkedList.get(i)); } end = new Date(); System.out.println("\ntime for linkedList used for loop:" + (end.getTime() - start.getTime())); } } // output:(单位是毫秒) // time for arrayList used iterator:16 // time for arrayList used for loop:15 // time for linkedList used iterator:0 // time for linkedList used for loop:92168
public void testArrayCopy () { // Prepare arrays User[] array = new User[10]; for (int i = 0; i < 10; i++) { array[i] = new User("" + i); } User[] newArray = new User[10]; System.arraycopy(array, 2, newArray, 1, 8); for (User user:newArray) { System.out.print(", " + user); } System.out.println(); // modify array newArray[1].setName("change"); for (int i = 0; i < 10; i++) { System.out.print(", " + array[i]); } } class User{ String name; protected User() { } public User(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return " \"" + name + "\" "; } } // output: // , null, "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , null // , "0" , "1" , "change" , "3" , "4" , "5" , "6" , "7" , "8" , "9"
public void testToArray() { List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); String[] str = new String[5]; str[3] = "4"; str[4] = "5"; String[] newStr = list.toArray(str); for (String s : newStr) { System.out.print(", " + s); } } // output: , 1, 2, 3, null, 5
发表评论
-
JEECG 部署过程
2013-06-05 10:50 7683平台迁移(MyEclipse -> E ... -
构建 SSH2
2011-11-24 22:52 0之前做项目,框架已是搭建好的。虽然自己也搭建过,虽然网 ... -
天干地支
2011-10-10 11:40 1055想实现天干地支与数值的互换算法,在网上找到了一些相关信息,于是 ... -
POJ 1009 Edge Detection(一)
2011-10-10 00:16 1885花了一晚上的时间才弄出来的程序居然 OutOfMemery 了 ... -
POJ 1008 Maya Calendar
2011-10-09 00:43 1362POJ 1008 Maya Calendar 这道题,让我一 ... -
POJ 1007 DNA Sorting(待改善)
2011-10-08 21:08 1525POJ 1007 DNA Sorting 这道题做的不舒服, ... -
POJ 1006 Biorhythms
2011-10-08 19:45 1207POJ 1006 Biorhythms 这题是去年完成的,找 ... -
POJ 1005 I Think I Need a Houseboat
2011-10-07 19:33 2236POJ 1005 I Think I Need a House ... -
POJ 1003 Hangover
2011-10-07 17:38 1176一开始没看清题目,不明白要做什么。在转了圈,明白了就是求 1/ ... -
POJ 1002 487-3279
2011-10-07 02:14 1470很久没写东东了,懒了。在大学的时候就一直想支持做 北大ACM ... -
Java Date 类的一个神级误差
2011-08-22 22:08 1895源自 Stack Overflow 的一个问题,原文点 ... -
Java Date 类的一个神级误差
2011-08-22 22:06 0源自 Stack Overflow 的一个 ... -
ServerSocket
2011-06-07 00:08 1185找到本好书,《How Tomecat Work》。嘻嘻,按里面 ... -
Struts2 小结
2011-05-29 23:55 1210从工作开始便一时使用 struts 2 作为前端,已经有18个 ... -
端口占用解决方案 Windows xp
2010-12-10 00:57 2488因为使用 JBoss 进行开发,所以 JBoss 使用的端口, ... -
BASE64 编码实现
2009-10-31 23:08 1399用了几天的时间实现了B ... -
垃圾收集趣史-Java垃圾收集算法 --- 王咏刚
2009-10-17 14:23 1187本文转自:Java的黑暗空 ...
相关推荐
进一步,实习生掌握了Java的面向对象编程特性,如抽象、多态、继承和封装,并了解了Java异常处理、常用类(如String、StringBuffer)以及集合框架(如Set、List、Map)。 【数据库连接与Oracle知识】 在数据库方面...
根据提供的文件信息,我们可以从中提炼出关于Java实习过程中的关键知识点。这不仅涵盖了Java基础知识的学习,还包括了实际项目开发中的具体应用。以下是对这五个星期实习周记中提及的重要知识点的详细总结: ### 第...
本篇实习主要关注Java中的文件输入输出流,包括字节流、字符流、缓冲流和对象流的使用,以及File类和Serializable接口的应用。 首先,我们来看实验题1,它要求从指定目录“.\files\poem”中读取两个txt文件的内容,...
Java实习报告是对实习生在Java开发领域实践经历的总结与反思,是学习与工作经验的重要记录。在实习期间,实习生通常会参与实际项目,了解并掌握Java编程语言的核心概念、设计模式以及开发流程。以下是对"实验一"的...
总结,这份实习报告详细涵盖了Java语言的基础知识,从语言的历史、基本语法、数据类型、控制结构到面向对象编程、异常处理、集合框架等核心概念,还包括了简单的IO流、线程和网络编程的介绍,对于初学者来说是一份...
1. Java基础(coreJava):文档中多次提及Java基础,这涵盖了Java语言的核心概念,包括数据类型、运算符、控制流程(if-else、循环)、数组、面向对象编程(类、对象、继承、多态)、异常处理、集合框架(List、Map...
本文档记录了 Java 毕业生的校外实习日记,涵盖了 Java 基础内容、Java 网络编程、JDBC、泛型、反射等知识点。 Java 基础内容 * 线程(Thread):多用户同时工作的机制 * 集合(Collection):包括 List、Set、Map...
2. **Java环境配置**:在第一周,实习生主要学习了如何配置Java编程环境,这是进行Java开发的基础步骤,包括安装JDK,配置JAVA_HOME环境变量,以及设置IDE(如Eclipse或IntelliJ IDEA)等。 3. **Java基础知识**: ...
"阿里云Java实习生面试记录整理" 本文将从阿里云Java实习生面试记录中提取出重要的知识点,并对其进行详细的解释。 List和Set的区别 List和Set都是继承自Collection接口,但它们有着不同的特点。List的特点是元素...
本 Java 实习周记记录了作者在 Java 实习期间的学习经验和总结,涵盖了 Java 基础知识、Java 高级语法、Java 线程和 Collection 框架等方面的知识点。 一、Java 基础知识 * 类之间的关系:关联、聚合、继承、...
在Java实习过程中,实习生通常会经历一系列的学习与实践,这些经验是成为一名专业Java开发者的基石。这份"Java个人实习总结.pdf"很可能包含了这样的宝贵经验。以下是对Java实习中可能涉及的一些核心知识点的详细阐述...
实习初期,学生主要学习Java基础,包括线程Thread和集合Collection,如ArrayList、LinkedList、HashSet、TreeSet以及HashMap、TreeMap和HashTable等。线程是实现多用户并发操作的关键,而集合则涉及到数据的组织和...
通过五周的实习,实习生逐步掌握了Java语言的基础和高级特性,以及相关的编程概念。 第一周,实习生主要经历了适应期,理解了公司的背景、产品和业务方向,并开始调整作息时间以适应工作环境。在这个阶段,他们熟悉...
### 实习生Java面试题集及详细答案解析 #### 一、Java基本数据类型与String类型 1. **Java的基本数据类型**: - Java语言提供了八种基本数据类型,可以分为以下几类: - **整数类型**:包括`byte`(8位)、`...
Java实习内容笔记与作业主要涵盖了Java编程语言的基础知识、核心概念以及实际开发中的应用。这份资料可能是某位实习生在实习期间的学习记录,包含了他对Java的理解和实践经验,对于初学者或者正在学习Java的人来说,...
### Java面试测试题目知识点梳理 #### 1. int和Integer有什么区别? - **int**: 是Java的基本数据类型之一,用于存储整数值。占用4个字节的空间,取值范围为-2^31到2^31-1。 - **Integer**: 是int的包装类,实现了...
首先,对于Java实习,通常会涉及到的知识点可能包括Java基础语法、面向对象编程、Java集合框架、异常处理、输入输出流(I/O)以及Java的图形用户界面(GUI)编程等。 1. Java基础语法:在实习过程中,首先需要掌握...
根据给定的文件信息,以下是对“实习生java面试题集及详细答案”中涉及的关键知识点的深入解析: ### Java的基本数据类型与String的区别 Java语言提供了八种基本数据类型,分为数字类型、字符类型和布尔类型。具体...
- **Collection**:Java集合框架的核心接口,包括List、Set和Queue等子接口,以及ArrayList、LinkedList、HashSet、HashMap等具体实现类。 - **迭代器**:遍历集合的工具,提供了remove()、hasNext()和next()等...