说明:面试准备,写的挺不错的。 转载地址: http://www.cnblogs.com/zhxxcq/archive/2012/03/11/2389611.html

1、综述

所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。

当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。

Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List。

Map实现类用于保存具有映射关系的数据(key-value)。

Set、List和Map可以看做集合的三大类。

List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。

Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。

Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayList和HashMap三个实现类。(并发控制的集合类,以后有空研究下)。

2、Collection接口

Collection接口是List、Set和Queue接口的父接口,同时可以操作这三个接口。

Collection接口定义操作集合元素的具体方法大家可以参考API文档,这里通过一个例子来说明Collection的添加元素、删除元素、返回集合中元素的个数以及清空集合元素的方法。

public class TestCollection
{
public static void main(String[] args)
{
Collection c = new ArrayList();
//添加元素
c.add("孙悟空");
//虽然集合里不能放基本类型的值,但Java支持自动装箱
c.add(6); System.out.println("c集合的元素个数为:" + c.size());      //删除指定元素
c.remove(6);      System.out.println("c集合的元素个数为:" + c.size());
//判断是否包含指定字符串
System.out.println("c集合的是否包含孙悟空字符串:" + c.contains("孙悟空")); c.add("轻量级J2EE企业应用实战"); System.out.println("c集合的元素:" + c);      Collection books = new HashSet(); books.add("轻量级J2EE企业应用实战");
books.add("Struts2权威指南"); System.out.println("c集合是否完全包含books集合?" + c.containsAll(books)); //用c集合减去books集合里的元素
c.removeAll(books); System.out.println("c集合的元素:" + c); //删除c集合里所有元素
c.clear(); System.out.println("c集合的元素:" + c); //books集合里只剩下c集合里也同时包含的元素
books.retainAll(c); System.out.println("books集合的元素:" + books);
}
}

程序输出结果:

c集合的元素个数为:2 
c集合的元素个数为:1 
c集合的是否包含孙悟空字符串:true 
c集合的元素:[孙悟空, 轻量级J2EE企业应用实战] 
c集合是否完全包含books集合?false 
c集合的元素:[孙悟空] 
c集合的元素:[] 
books集合的元素:[]

3、两种遍历集合的方法Iterator接口和foreach循环

1、Iterator接口

Iterator也是Java集合框架的成员,主要用于遍历(即迭代访问)Collection集合中的元素,也称为迭代器。

提供的三种方法:

boolean hasNext():返回集合里的下一个元素。

Object next():返回集合里下一个元素。

void remove();删除集合里上一次next方法返回的元素。

public class TestIterator 
{
public static void main(String[] args)
{
//创建一个集合
Collection books = new HashSet(); books.add("轻量级J2EE企业应用实战");
books.add("Struts2权威指南");
books.add("基于J2EE的Ajax宝典"); //获取books集合对应的迭代器
Iterator it = books.iterator(); while(it.hasNext())
{
       //未使用泛型,需要强制转换
String book = (String)it.next(); System.out.println(book); if (book.equals("Struts2权威指南"))
{
it.remove();     //使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常
    //books.remove(book); } //对book变量赋值,不会改变集合元素本身
book = "测试字符串"; }
System.out.println(books);
}
}

程序运行结果:

Struts2权威指南 
基于J2EE的Ajax宝典 
轻量级J2EE企业应用实战 
[基于J2EE的Ajax宝典, 轻量级J2EE企业应用实战]

说明:

(1)通过语句“book = "测试字符串"; ”对迭代变量book进行赋值时,当我们再次输出books集合时,集合里的元素没有任何变化。即当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给迭代变量,而是把集合元素的值传给了迭代变量。

(2)当使用Iterator来访问Collection集合元素时,只有通过Iterator的remove方法删除(it.remove();)上一次next方法返回的集合元素才可以给集合中添加元素(book = "测试字符串"; )。否则引发java.util.ConcurrentModificationExcption异常。

2、使用foreach循环遍历集合元素。

格式:for(元素类型 t  元素变量 x : 遍历对象A) {

// 程序块

}

说明:

(1)foreach简化了对数组和集合的遍历,如果不希望遍历整个集合,或者在循环内部需要操作下标值就需要使用传统的for循环。

(2)简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。

(3)foreach一般结合泛型使用

实例应用:

public class TestArray {
public static void main(String args[]) {
TestArray test = new TestArray();
test.test1();
test.listToArray();
test.testArray3(); } /**
* foreach语句输出一维数组
*/
public void test1() {
// 定义并初始化一个数组
int arr[] = { 2, 3, 1 };
System.out.println("----1----排序前的一维数组"); for (int x : arr) {
System.out.println(x); // 逐个输出数组元素的值
} // 对数组排序
Arrays.sort(arr); // 利用java新特性for each循环输出数组
System.out.println("----1----排序后的一维数组"); for (int x : arr) {
System.out.println(x); // 逐个输出数组元素的值
}
} /**
* 集合转换为一维数组
*/
public void listToArray() {
// 创建List并添加元素
List<String> list = new ArrayList<String>();
list.add("1");
list.add("3");
list.add("4"); // 利用froeach语句输出集合元素
System.out.println("----2----froeach语句输出集合元素"); for (String x : list) {
System.out.println(x);
} // 将ArrayList转换为数组
Object s[] = list.toArray(); // 利用froeach语句输出集合元素
System.out.println("----2----froeach语句输出集合转换而来的数组元素"); for (Object x : s) {
System.out.println(x.toString()); // 逐个输出数组元素的值
}
} /**
* foreach输出二维数组测试
*/
public void testArray2() {
int arr2[][] = { { 4, 3 }, { 1, 2 } }; System.out.println("----3----foreach输出二维数组测试"); for (int x[] : arr2) {
for (int e : x) {
System.out.println(e); // 逐个输出数组元素的值
}
}
} /**
* foreach输出三维数组
*/
public void testArray3() {
int arr[][][] = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } }; System.out.println("----4----foreach输出三维数组测试"); for (int[][] a2 : arr) {
for (int[] a1 : a2) {
for (int x : a1) {
System.out.println(x);
}
}
}
}
}

程序运行结果:

----1----排序前的一维数组 



----1----排序后的一维数组 



----2----froeach语句输出集合元素 



----2----froeach语句输出集合转换而来的数组元素 



----4----foreach输出三维数组测试 







8

感想:

这篇先写到这里,后续文章将会介绍其余集合接口和类的详细知识。

这是自己写博客的第一篇文章,虽然很多内容都是借鉴高手的,但是从他们的字里行间可以看出他们对技术的痴迷和研究的深入。

我从接触Java到现在也就一年多时间,我深深被Java的一些程序表达方式所吸引。感觉它的语言风格更接近我们自然语言的表述。

在程序中表达自己的思想何尝不是一件畅事。

虽然断断续续的自学了一些Java知识,现在也可以看懂Java的大部分代码,但是要是自己去写出那些高深的代码,感觉还是有些棘手。

听大师说,语言是用来思考的。

要是学会了用Java语言进行思考,那么一定可以小有所成。

现在给自己制定了一个计划,就是从写博客来提高自己学习Java的积极性。

首先是一些基础知识的总结,结合一些实例表明知识的应用。

我想这会持续很久,也是考验自己,提高自己的好机会。

正如我的博客标题,用代码阐释人生的哲学,从代码中领悟人生,看清世事。

祝福每个奋斗在Java中的人们都可以找到最真的自己。

文章中代码和部分内容来源于《疯狂Java讲义》,如需转载,请注明出处。谢谢。

Java集合框架的知识总结的更多相关文章

  1. Java集合框架的知识总结(1)

    说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析. 1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象 ...

  2. Java集合框架相关知识整理

    1.常见的集合有哪些? Collection接口和Map接口是所有集合框架的父接口    Collection接口的子接口包括:Set接口和List接口    Map接口的实现类主要有:HashMap ...

  3. 集合框架基础知识-----java基础知识

    Java集合框架 :接口:Collection.List .Set. Map:实现类:ArrayList.LinkedList.Vector.HashSet.TreeSet.HashMap.HashT ...

  4. Java集合框架的总结

    本篇文章先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析.当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进 ...

  5. 【java集合框架源码剖析系列】java源码剖析之TreeSet

    本博客将从源码的角度带领大家学习TreeSet相关的知识. 一TreeSet类的定义: public class TreeSet<E> extends AbstractSet<E&g ...

  6. 【java集合框架源码剖析系列】java源码剖析之HashSet

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于HashSet的知识. 一HashSet的定义: public class HashSet&l ...

  7. 【java集合框架源码剖析系列】java源码剖析之TreeMap

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...

  8. 【java集合框架源码剖析系列】java源码剖析之ArrayList

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...

  9. 【java集合框架源码剖析系列】java源码剖析之LinkedList

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 在实际项目中LinkedList也是使用频率非常高的一种集合,本博客将从源码角度带领大家学习关于LinkedList的知识. ...

随机推荐

  1. “Zhuang.Data”轻型数据库访问框架(一)开篇介绍

    目录: “Zhuang.Data”轻型数据库访问框架(一)开篇介绍 “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象 框架介绍 该框架主要用于数据库访问,封装了包括 ...

  2. Qt(QML)本地化

    Internationalization and Localization with Qt Quick 程序国际化 1) Use qsTr() for all  Literial UI strings ...

  3. 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用

    整理部分JS 控件  WEB前端常用的做成Jsp项目,方便今后直接用 最近又没时间了,等用时间了,再加入更多的, 源码下载: http://download.csdn.net/detail/liang ...

  4. 11-3URLTestDemo实例操作完成URL单元测试

    11-3URLTestDemo 1.File -> New -> Project 在左边模板中选择Visual C#里的Web,对应到的项目类型选择ASP.NET MVC3 Web App ...

  5. 工具类_java 操作cookie

    import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.net.URLEncoder;im ...

  6. 脑波设备mindwave数据流二次开发示例

    数据流开发神念科技提供了两个文件ThinkGearStreamParse.h和ThinkGearStreamParse.cpp两个文件,主要接口为: 宏定义: /* Data CODE definit ...

  7. openStack juno for ubuntu12-04

    <一,preinstall basic conf,pre Env> 1,pwgen(openssl rand -hex 10) some Open-Stack services add a ...

  8. mirantis cert

    with no vendor specificity and/or proprietary implementations,没有供应商的特异性和/或专有的实现 https://training.mir ...

  9. LuCI探究(转)

    原文链接 : http://www.cnblogs.com/gnuhpc/archive/2013/08/31/3293643.html 1. 多语言 1)检查: opkg list | grep l ...

  10. 一步一步学c#(五):泛型

    泛型 性能 泛型的一个重要的优点是性能.system.collections和system.collections.generic名称空间的泛型和非泛型集和类.对值类型使用非泛型集合类,在把值类型转换 ...