`
xiaojunhu
  • 浏览: 30112 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA容器小结

 
阅读更多

JAVA中的容器提供了非常完善的方法来保存对象,你可以使用这些工具来解决大数据量的问题。下面是笔者在开发中用到过的一些容器总结如此。

1 ArrayList

使用ArrayList非常简单:创建一个实例,用add()插入对象,然后用get()访问这些对象,此时需要索引,就象数组一样,但是不需要方括号,ArrayList还有size()方法,从而可以知道ArrayList的大小,也可以避免因为越界而引发错误。另外,ArrayList长于随机访问元素,但是在List的中间插入和移处元素时较慢。下面是ArrayList的例子(来自thinking in java):

/**//*
*@(#)AppleAndOrangesWithGenerics.java1.0May17,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

packageholding;

importjava.util.ArrayList;

publicclassAppleAndOrangesWithGenerics...{

publicstaticvoidmain(String[]args)...{
ArrayList
<Apple>apples=newArrayList<Apple>();
for(inti=0;i<3;i++)...{
apples.add(
newApple());
}


for(inti=0;i<apples.size();i++)
System.out.println(((Apple)apples.get(i)).id());

for(Applec:apples)
System.out.println(c.id()
+"-");
}

}

/**//*
*@(#)ListFeatures.java1.0May17,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

packageholding;

importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.Collections;
importjava.util.List;
importjava.util.Random;

importtypeinfo.pets.*;

publicclassListFeatures...{

publicstaticvoidmain(String[]args)...{
Randomrand
=newRandom(47);
List
<Pet>pets=Pets.arrayList(7);
System.out.print(
"1:"+pets);
System.out.println();
Hamsterh
=newHamster();
pets.add(h);
System.out.print(
"2:"+pets);
System.out.println();
System.out.print(
"3:"+pets.contains(h));
System.out.println();
pets.remove(h);
Petp
=pets.get(2);
System.out.print(
"4:"+pets.indexOf(p));
System.out.println();
Petcymric
=newCymric();
System.out.print(
"5:"+pets.indexOf(cymric));
System.out.println();
System.out.print(
"6:"+pets.remove(cymric));
System.out.println();
System.out.print(
"7:"+pets.remove(p));
System.out.println();
System.out.print(
"8:"+pets);
System.out.println();
pets.add(
3,newMouse());
System.out.print(
"9:"+pets);
System.out.println();
List
<Pet>sub=pets.subList(1,4);
System.out.print(
"sublist:"+sub);
System.out.println();
System.out.print(
"10:"+pets.containsAll(sub));
System.out.println();
Collections.sort(sub);
System.out.print(
"sortedsublist:"+sub);
System.out.println();
System.out.print(
"11:"+pets.containsAll(sub));
System.out.println();
Collections.shuffle(sub,rand);
System.out.print(
"shufflesublist:"+sub);
System.out.println();
System.out.print(
"12:"+pets.containsAll(sub));
System.out.println();
List
<Pet>copy=newArrayList<Pet>(pets);
sub
=Arrays.asList(pets.get(1),pets.get(4));
System.out.print(
"sub:"+sub);
System.out.println();
copy.retainAll(sub);
System.out.print(
"13:"+copy);
System.out.println();
copy
=newArrayList<Pet>(pets);
copy.remove(
2);
System.out.print(
"14:"+copy);
System.out.println();
copy.removeAll(sub);
System.out.print(
"15:"+copy);
System.out.println();
copy.set(
1,newMouse());//Replaceanelement
System.out.print("16:"+copy);
System.out.println();
copy.addAll(
2,sub);
System.out.print(
"17:"+copy);
System.out.println();
System.out.print(
"18:"+pets.isEmpty());
System.out.println();
pets.clear();
System.out.print(
"19:"+pets);
System.out.println();
System.out.print(
"20:"+pets.isEmpty());
System.out.println();
pets.addAll(Pets.arrayList(
4));
System.out.print(
"21:"+pets);
System.out.println();
Object[]o
=pets.toArray();
System.out.print(
"22:"+o[3]);
System.out.println();
Pet[]pa
=pets.toArray(newPet[0]);
System.out.print(
"23:"+pa[3].id());
System.out.println();
}

}

运行结果:

1:[Rat,Manx,Cymric,Mutt,Pug,Cymric,Pug]
2:[Rat,Manx,Cymric,Mutt,Pug,Cymric,Pug,Hamster]
3:true
4:2
5:-1
6:false
7:true
8:[Rat,Manx,Mutt,Pug,Cymric,Pug]
9:[Rat,Manx,Mutt,Mouse,Pug,Cymric,Pug]
sublist:[Manx,Mutt,Mouse]
10:true
sortedsublist:[Manx,Mouse,Mutt]
11:true
shufflesublist:[Mouse,Manx,Mutt]
12:true
sub:[Mouse,Pug]
13:[Mouse,Pug]
14:[Rat,Mouse,Mutt,Pug,Cymric,Pug]
15:[Rat,Mutt,Cymric,Pug]
16:[Rat,Mouse,Cymric,Pug]
17:[Rat,Mouse,Mouse,Pug,Cymric,Pug]
18:false
19:[]
20:true
21:[Manx,Cymric,Rat,EgyptianMau]
22:EgyptianMau
23:14

2 LinkedList

LinkedList也像ArrayList一样实现了基本的List接口,但是它执行某些操作(比如插入、删除)时要比ArrayList更加的高效,但是在随机访问操作方面要逊色一些。此外,LinkedList还添加了可以使其用作栈、队列或双端队列的方法。下面是关于LinkedList使用的例子:

/**//*
*@(#)LinkedListFeatures.java1.0May18,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

packageholding;

importjava.util.LinkedList;
importstaticnet.mindview.util.Print.*;

importtypeinfo.pets.Hamster;
importtypeinfo.pets.Pet;
importtypeinfo.pets.Pets;
importtypeinfo.pets.Rat;

publicclassLinkedListFeatures...{

publicstaticvoidmain(String[]args)...{

LinkedList
<Pet>pets=newLinkedList<Pet>(Pets.arrayList(5));
print(pets);
print(
"pets.getFirst():"+pets.getFirst());
print(
"pets.element():"+pets.element());
print(
"pets.peek():"+pets.peek());

print(
"pets.remove():"+pets.remove());
print(
"pets.removeFirst():"+pets.removeFirst());
print(
"pets.poll():"+pets.poll());
print(pets);

pets.addFirst(
newRat());
print(
"AfteraddFirst():"+pets);
pets.offer(Pets.randomPet());
print(
"Afteroffer():"+pets);
pets.add(Pets.randomPet());

print(
"Afteradd():"+pets);
pets.addLast(
newHamster());
print(
"AfteraddLast():"+pets);
print(
"pets.removeLast():"+pets.removeLast());
}

}

运行结果:

[Rat,Manx,Cymric,Mutt,Pug]
pets.getFirst():Rat
pets.element():Rat
pets.peek():Rat
pets.remove():Rat
pets.removeFirst():Manx
pets.poll():Cymric
[Mutt,Pug]
AfteraddFirst():[Rat,Mutt,Pug]
Afteroffer():[Rat,Mutt,Pug,Cymric]
Afteradd():[Rat,Mutt,Pug,Cymric,Pug]
AfteraddLast():[Rat,Mutt,Pug,Cymric,Pug,Hamster]
pets.removeLast():Hamster

List的排序和查询:List排序和查询所使用的方法与对象数组所使用的相应方法有相同的名字和语法,只是用Collections的static方法代替Arrays的方法而已。例子如下:

/**//*
*@(#)ListSortSearch.java1.0May18,2008
*@author:Administrator
*Copyright2008CSSWEBMicrosystems,Inc.Allrightsreserved.
*CSSWEBROOMPROPRIETARY/CONFIDENTIAL.Useissubjecttolicenseterms.
*/

packagecontainers;

importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.List;
importjava.util.ListIterator;
importjava.util.Random;

importcontainers.Utilities;
importstaticnet.mindview.util.Print.*;

publicclassListSortSearch...{

publicstaticvoidmain(String[]args)...{
List
<String>list=newArrayList<String>(Utilities.list);
list.addAll(Utilities.list);
print(list);
Collections.shuffle(list,
newRandom(47));
print(
"shuffled:"+list);
ListIterator
<String>it=list.listIterator(10);
while(it.hasNext())...{
it.next();
it.remove();
}

print(
"Trimmed:"+list);
Collections.sort(list);
print(
"sorted:"+list);
Stringkey
=list.get(7);
intindex=Collections.binarySearch(list,key);
print(
"Locationof"+key+"is"+index+
",list.get("+index+")="+list.get(index));
Collections.sort(list,String.CASE_INSENSITIVE_ORDER);
print(
"Case-insensitivesorted:"+list);
key
=list.get(7);
index
=Collections.binarySearch(list,key,String.CASE_INSENSITIVE_ORDER);
print(
"Locationof"+key+"is"+index+
",list.get("+index+")="+list.get(index));
}

}

分享到:
评论

相关推荐

    JAVA清华大学教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    Java中Spring获取bean方法小结

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢...下面通过本文给大家介绍Java中Spring获取bean方法小结,对spring获取bean方法相关知识感兴趣的朋友一起学习吧

    从Java走向Java+EE+.rar

    1.5 小结 13 第2章 使用Jakarta Commons来简化开发 14 2.1 Jakarta Commons的功能和用法 14 2.2 小结 18 第3章 Java EE容器 19 3.1 什么是容器 19 3.2 Tomcat的安装和使用 20 3.3 小结 25 第4章 在...

    JAVA 清华大学 教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    清华大学JAVA教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言中...

    Java编程语言详细教程

    ◇本讲小结 ◇课后习题 ★ 第二讲 Java语言基础知识 ◇课前索引 ◇2.1 简单数据类型 ◇2.2 运算符和表达式 ◇2.3 控制语句 ◇2.4 数组 ◇2.5 字符串的处理 ◇本讲小结 ◇课后习题 ★ 第三讲 Java语言...

    Java数据编程指南

    数据定义 基本数据操作 数据完整性 表达式 连接 合并 ...Java 小结 附录D 配置Tomcat、JRun和Orion Tomcat安装和配置 JRun 3.0安装和配置 安装检索 附录E 在WebLogic 6.0上配置并...

    Java容器类接口框架总览1

    1. Collection接口 3. Queue与Deque接口 6. 实现类小结 7. 迭代器 1. Collection接口

    Java基础知识点总结.docx

    Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特性 347 Java...

    Java测试新技术TestNG和高级概念.part1

    1.5 本章小结 第2章 测试设计模式 2.1 针对失败而测试 2.2 工厂 2.3 数据驱动测试 2.4 异步测试 2.5 测试多线程代码 2.6 性能测试 2.7 模拟和桩 2.8 依赖的测试 2.9 继承和annotation范围 2.10 测试分组 2.11 ...

    Java测试新技术TestNG和高级概念.part2

    1.5 本章小结 第2章 测试设计模式 2.1 针对失败而测试 2.2 工厂 2.3 数据驱动测试 2.4 异步测试 2.5 测试多线程代码 2.6 性能测试 2.7 模拟和桩 2.8 依赖的测试 2.9 继承和annotation范围 2.10 测试分组 2.11 ...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part1

    7.7.2 小结并准备下一次重构 7.8 第五次重构 7.9 第六次重构 7.10 第七次重构 7.11 事后剖析 7.11.1 关于模块测试 7.11.2 关于管理模块依赖 7.11.3 关于模块重用 7.11.4 关于构建 7.11.5 关于面向对象 7.12 结论 ...

    Java SE实践教程 pdf格式电子书 下载(四) 更新

    感谢大家的支持,我终于升级了,上传限制得到提升,所以把资源整合下!希望大家一如既往 Java SE实践教程 pdf格式电子书 下载(一) 更新 ...Java SE实践教程 pdf格式电子书 下载(二) 更新 ...13.4 小结 387

    JAVA社区交流平台网站

    2.3 本章小结 9 第三章 服务开发平台的总体框架 10 3.1 前台可视化IDE的设计 11 3.2 后台的总体设计 12 3.2.1 后台RuntimeContainer容器管理模块设计概述 13 3.2.2 后台UDDI注册中心模块设计概述 14 3.2.3 后台SP ...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part2

    7.7.2 小结并准备下一次重构 7.8 第五次重构 7.9 第六次重构 7.10 第七次重构 7.11 事后剖析 7.11.1 关于模块测试 7.11.2 关于管理模块依赖 7.11.3 关于模块重用 7.11.4 关于构建 7.11.5 关于面向对象 ...

    疯狂JAVA讲义

    1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...

    Java数据库编程宝典3

    1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 ...

    Thinking in java4(中文高清版)-java的'圣经'

    + 和 += 3.14 使用操作符时常犯的错误 3.15 类型转换操作符 3.15.1 截尾和舍入 3.15.2提升 3.16 Java没有“sizeof” 3.17 操作符小结 3.18 总结 第4章 控制执行流程 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

Global site tag (gtag.js) - Google Analytics