java----JSTL学习笔记(转)
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap、Hashset
ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而 ArrayList和HashMap并不是线程安全的。因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于 ArrayList和HashMap。
由Collection接口派生的两个接口是List和Set。
List是有序、重复的集合,set是无需不可重复的集合。
Java中的“STL”可以从C++中进行衍生理解,Java拥有了C++的STL功能,这些功能类被封装在java.util包内,以下简称这些类的统称为J-STL。
util定义了如下接口,J-STL主要实现了以下几个接口——斜体字表示
Collection (Java 2)
List (Java 2)
Observer
Comparator (Java 2)
ListIterator (Java 2)
Set (Java 2)
Enumeration Map (Java 2)
SortedMap (Java 2)
EventListener
Map.Entry (Java 2)
SortedSet (Java 2)
Iterator (Java 2)
我们所使用的J-STL类都是这些接口的某个实现。下面是简单的部分介绍。
Collection接口
Collection 能使你操作对象组,它位于类集层次结构的顶层。Collection接口是构造类集框架的基础。它声明所有类集都将拥有的核心方法。
一个类集不能直接存储类型int,char,double等的值,如果要使用这些类型,则使用对象,比如new Integer(1)。
常用的使用方法如下:
boolean add(Object obj) 将obj加入到调用类集中。如果obj被加入到类集中了,则返回true;如果obj已经是类集中的一个成员或类集不能被复制时,则返回false
boolean addAll(Collection c) 将c中的所有元素都加入到调用类集中,如果操作成功(也就是说元素被加入了),则返回true;否则返回false
void clear( ) 从调用类集中删除所有元素
boolean contains(Object obj) 如果obj是调用类集的一个元素,则返回true,否则,返回false
boolean containsAll(Collection c) 如果调用类集包含了c中的所有元素,则返回true;否则,返回false
boolean equals(Object obj) 如果调用类集与obj相等,则返回true;否则返回false
int hashCode( ) 返回调用类集的散列码
boolean isEmpty( ) 如果调用类集是空的,则返回true;否则返回false
Iterator iterator( ) 返回调用类集的迭代程序
Boolean remove(Object obj) 从调用类集中删除obj的一个实例。如果这个元素被删除了,则返回true;否则返回false
Boolean removeAll(Collection c) 从调用类集中删除c的所有元素。如果类集被改变了(也就是说元素被删除了),则返回true;否则返回false
Boolean retainAll(Collection c) 删除调用类集中除了包含在c中的元素之外的全部元素。如果类集被改变了(也就是说元素被删除了),则返回true,否则返回false
int size( ) 返回调用类集中元素的个数
List接口
List接口相当于链表,无序、可重复。
ArrayList类
ArrayList类扩展AbstractList并执行List接口。ArrayList支持可随需要而增长的动态数
组。在Java中,标准数组是定长的。在数组创建之后,它们不能被加长或缩短,这也就意
味着你必须事先知道数组可以容纳多少元素。但是,你直到运行时才能知道需要多大的数
组。为了解决这个问题,类集框架定义了ArrayList。本质上,ArrayList是对象引用的一个
变长数组。也就是说,ArrayList能够动态地增加或减小其大小。数组列表以一个原始大小
被创建。当超过了它的大小,类集自动增大。当对象被删除后,数组就可以缩小。
Vector类
Vector实现动态数组。这与ArrayList相似,但两者不同的是:Vector是同步的,并且它
包含了许多不属于类集框架的从以前版本遗留下来的方法。随着Java 2的公布,Vector被重
新设计来扩展AbstractList和实现List接口。如果没有指定增量,在每个分配周期,矢量的大小增一倍。
Stack类
Stack是Vector的一个子类,它实现标准的后进先出堆栈
LinkedList类
LinkedList类扩展AbstractSequentialList并执行List接口。它提供了一个链接列表数据结
构。
显然要理解ArrayList和LinkedList这两种数据结构,可以类比到链表和数组的异同。
前者插入到中间的元素对后面的元素造成了移位,效率低,而后者不需要。例子:
private static void testArrayListandLinkedList(){
long start = System.currentTimeMillis();
List<String> list1 = new ArrayList<String>();
for(int i=0;i<10000;i++){
list1.add(0,"hello");
}
long end = System.currentTimeMillis();
System.out.println("start:"+ start + " end:"+end+" time use :"+ (end-start)+"ms");
start = System.currentTimeMillis();
List<String> list2 = new LinkedList<String>();
for(int i=0;i<10000;i++){
list2.add(0,"hello");
}
end = System.currentTimeMillis();
System.out.println("start:"+ start + " end:"+end+" time use :"+ (end-start)+"ms");
}
同样都插入到第一个元素,LinkedList的效率高的多:
start:1358144834832 end:1358144834874 time use :42ms
start:1358144834875 end:1358144834877 time use :2ms
Set接口
Set接口相当于集合,无序、不可重复。
SortedSet接口相当于有序的集合,有序、不可重复。SortedSet接口扩展了Set并说明了按升序排列的集合的特性。
J-STL迭代器
1. 通过调用类集的iterator( )方法获得对类集头的迭代函数。
2. 建立一个调用hasNext( )方法的循环,只要hasNext( )返回true,就进行循环迭代。
3. 在循环内部,通过调用next( )方法来得到每一个元素。
boolean hasNext( ) 如果存在更多的元素,则返回true,否则返回false
Object next( ) 返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常
void remove( ) 删除当前元素,如果试图在调用next( )方法之后,调用remove( )方法,则引发IllegalStateException异常
void add(Object obj) 将obj插入列表中的一个元素之前,该元素在下一次调用next( )方法时,被返回
boolean hasNext( ) 如果存在下一个元素,则返回true;否则返回false
boolean hasPrevious( ) 如果存在前一个元素,则返回true;否则返回false
Object next( ) 返回下一个元素,如果不存在下一个元素,则引发一个NoSuchElementException异常
int nextIndex( ) 返回下一个元素的下标,如果不存在下一个元素,则返回列表的大小
Object previous( ) 返回前一个元素,如果前一个元素不存在,则引发一个NoSuchElementException异常
int previousIndex( ) 返回前一个元素的下标,如果前一个元素不存在,则返回-1
void remove( ) 从列表中删除当前元素。如果remove( )方法在next( )方法或previous( )方法调用之前被调用,则引发一个IllegalStateException异常
void set(Object obj) 将obj赋给当前元素。这是上一次调用next( )方法或previous( )方法最后返回的元素
和C++STL有一个很明显的不同,J-STL不用++和--来移动,而是用next和previous。
Iterator it = l.iterator(); // 获得一个迭代子
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
Map接口
Map接口
映射循环使用两个基本操作:get( )和put( )。使用put( )方法可以将一个指定了关键字和
值的值加入映射。为了得到值,可以通过将关键字作为参数来调用get( )方法。调用返回该
值。正如前面谈到的,映射不是类集,但可以获得映射的类集“视图”。为了实现这种功
能,可以使用entrySet( )方法,它返回一个包含了映射中元素的集合(Set)。为了得到关键
字的类集“视图”,可以使用keySet( )方法。为了得到值的类集“视图”,可以使用values( )
方法。类集“视图”是将映射集成到类集框架内的手段。
SortedMap接口
SortedMap接口扩展了Map,它确保了各项按关键字升序排序。由SortedMap说明的方法总结在表15-7中。当调用映射中没有的项时,其中的几种方法引发一个NoSuchElementException异常。当对象与映射中的元素不兼容时,则引发一个ClassCastException异常。当试图使用映射不允许使用的null对象时,则引发一个NullPointerException异常。
字典(Dictionary)是一个表示关键字/值存储库的抽象类,同时它的操作也很像映射(Map),散列表(Hashtable)是原始java.util中的一部分同时也是Dictionary的一个具体实现。
TreeMap 类
TreeMap类通过使用树实现Map接口。TreeMap提供了按排序顺序存储关键字/值对的有
效手段,同时允许快速检索。应该注意的是,不像散列映射,树映射保证它的元素按照关
键字升序排序。显然,TreeMap类显示出很好的排序优异。
注意对关键字进行了排序。然而,在这种情况下,它们用名字而不是用姓进行了排序。
可以通过在创建映射时,指定一个比较函数来改变这种排序
比较函数
TreeSet和TreeMap都按排序顺序存储元素。然而,精确定义采用何种“排序顺序”的
是比较函数。通常在默认的情况下,这些类通过使用被Java称之为“自然顺序”的顺序存
储它们的元素,而这种顺序通常也是你所需要的(A在B的前面,1在2的前面,等等)。如
果需要用不同的方法对元素进行排序,可以在构造集合或映射时,指定一个Comparator对
象。这样做为你提供了一种精确控制如何将元素储存到排序类集和映射中的能力。
Comparator接口定义了两个方法:compare( )和equals( )。
class MyComp implements Comparator<Object> {
public int compare(Object a, Object b) {
//String aStr, bStr;
//aStr = (String) a;
//bStr = (String) b;
//return bStr.compareTo(aStr);
Integer ai, bi;
ai = (Integer) a;
bi = (Integer) b;
return bi.compareTo(ai);
}
// no need to override equals
}
Map<Integer, String> treemap = new TreeMap<Integer, String>(new MyComp());
HashMap 类
HashMap类使用散列表实现Map接口。这允许一些基本操作如get( )和put( )的运行时间
保持恒定,即便对大型集合,也是这样的。
java----JSTL学习笔记(转)的更多相关文章
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- 20145213《Java程序设计学习笔记》第六周学习总结
20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Android(java)学习笔记267:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- Android(java)学习笔记207:开源项目使用之gif view
1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...
随机推荐
- Ioc及Bean容器(三)
专题一 IoC 接口及面向接口编程 什么是 IoC Spring 的Bean配置 Bean 的初始化 Spring 的常用注入方式 接口 用于沟通的中介物的抽象化 实体把自己提供给外界的一种抽象化说明 ...
- Selenuim自动化测试模型
本章内容: 概念介绍 自动化测试模型 一.概念 自动化测试库.框架.工具之间的区别: 库是由代码集合成的一个产品,供程序员调用,面向对象的代码组织形成的库叫类库,面向过程的代码组织形成的库叫函数库. ...
- 《JavaScript总结》js模块化
模块化开发,可以让代码易于扩展.便于日后维护. ES6中的模块化 我们先了解一下 export(导出) 和 import(导入) 这两个关键字. 新建一个文件a.js 并且导出变量test expor ...
- leetcode — search-insert-position
/** * Source : https://oj.leetcode.com/problems/search-insert-position/ * * Created by lverpeng on 2 ...
- 2.ES6引进的新特性——类Class
为什么? ES6中引入了类,类在java/c++等面向对象的编程语言常见,JS引入类是为了在日后使用js开发大型的应用程序,类本质是语法糖(语法上更加人性化) 以前写一个类 function User ...
- Mybatis的原理相关
今天看了一篇有关Mybatis非常好的文章,顺便写了一下学习心得. 原文地址:https://blog.csdn.net/u010349169/article/details/40422941 一.M ...
- TensorFlow的图切割模块——Graph Partitioner
背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在经过TensorFlow的Placer策略模块调整之后,下一步就是根据Pla ...
- Spring DAO模块
Spring的DAO模块提供了对JDBC.Hibernate.Mybatis等DAO层支持,本节介绍DAO模块对JDBC的支持.DAO模块依赖ommons-dbcp.jar.commons-pool. ...
- 基于 LWIP 建立 TCP Server 与主机通信实验
LWIP 版本:2.0.3 上一篇文章是写如何将 LWIP 移植到板子上,今天晚上记录基于 LWIP 实现与主机的网络通信. 先是打开了原子的实验例程,大概浏览了一遍,觉得 TCP 网络网络通信也就是 ...
- 分布式系统监视zabbix讲解十一之zabbix升级--技术流ken
思考 现在有这样一个需求,业务场景想要使用的监控模版没有3.0版本的,只有2.0,我们都知道2.0的模版无法导入进3.0版本的zabbix中,这个时候应该怎么获得3.0的监控模版哪?本篇博客将详细演示 ...