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 ...
随机推荐
- git 撤回放到暂存区的文件
git reset HEAD filename 如:git reset HEAD test.txt 或者使用 git reset . 撤回所有文件(注意后面还有个.)
- 西安活动 | 9月15号 "拥抱开源, 又见.NET" 线下交流活动
随着.NET Core的发布和开源,.NET又重新回到了人们的视野.除了开源.跨平台.高性能以及优秀的语言特性,越来越多的第三方开源库也出现在了github上——包括ML.NET机器学习.Xamari ...
- Perl基础速成
本文是针对没有Perl基础,但想用perl一行式命令取代grep/awk/sed的人,用于速学Perl基础知识. Perl一行式系列文章:Perl一行式程序 perl的-e选项 perl命令的-e选项 ...
- Django 系列博客(四)
Django 系列博客(四) 前言 本篇博客介绍 django 如何和数据库进行交互并且通过 model 进行数据的增删查改 ORM简介 ORM全称是:Object Relational Mappin ...
- 玩儿虫那些事(四)—— 使用curl
目录 一.爬一个简单的网站 二.模拟登录新浪 三.各种请求的发送 四.使用curl 五.模拟登录QQ空间 六.selenium的使用 七.phantomjs的使用 八.开源框架webmagic 九.开 ...
- 使用VSCode如何调试C#控制台程序_2_加深总结
要想使用调试,必须创建项目 1-你要调式的类,控制台类等等,你需要放在一个项目下,这个项目最好是由使用.net core创建的,VSCode对应的命令为: dotnet new console(这里以 ...
- C# 从网站下载图片
Image _image = Image.FromStream(WebRequest.Create(severPath).GetResponse().GetResponseStream());
- 用Vue.js搭建一个小说阅读网站
目录 1.简介 2.如何使用vue.js 3.部署api服务器 4.vue.js路由配置 5.实现页面加载数据 6.测试vue项目 7.在正式环境部署 8.Vue前端代码下载 1.简介 这是一个使用v ...
- 博客使用base64编码图片测试
为了解决发博客时需要先要上传,所以查了一下这个方法 1.把本地图片转为base64编码的字符串, 网上有很多提供这个功能的网站,转换后像这样 data:image/jpeg;base64,/9j/4A ...
- mssqlserver on linux - Linux下尝鲜MSSQL-SERVER【微软大法棒棒哒】
微软的开源精神真是无敌了,接下来体验下Linux安装与使用MSSQL-SERVER! 安装说明 目前支持的平台: Red Hat Enterprise Linux 7.2 Get RHEL 7.2 U ...