`
yaya_wiscom
  • 浏览: 49651 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

集合类复习

 
阅读更多

集合在Java中占据着举足轻重的位置,在平时的开发中,选择不同是数据结构会导致其实现风格以及性能存在很大的差异。我很喜欢Jquery的广告词:多学一点知识,就少写一行代码。有时候你费尽心机的去实现一个功能,如果选用的方法不对可能200行的代码也不见得来的比20行的代码强(有点扯远!!)。

(引用下图)


由上图可知,集合类的基本接口是:Collection接口。其中有两个最基本的方法:add方法和iterator方法。iterator()返回一个实现了Iterator接口的对象。可以使用这个对象依次访问集合中的元素。

遍历集合的常用方法:


//方式一 直接用迭代器遍历
Collection<Student> col = new LinkedList<Student>();
Iterator<Student> iter = col.iterator();
while(iter.hasNext()){
	String xh = iter.next().getXh();
	if("31083022".equals(xh)){
		throw new Exception("不能输出30183022学生的信息!");
	}
	//System.out.println(xh);
}
//方式二 用for循环
for(Student stu : col){
      System.out.println("学生信息:"+stu.toString());
}

 大部分人习惯用ArrayList,支持动态的增长和缩减的索引序列。如果需要从数组中间位置删除一个元素或是中间位置插入一个元素,则要付出很大的代价,其原因就是数组中处于被删除元素之后的所有元素都要向数组前端或后端移动。

链表的使用就不在这里记录了,这里需要说一下java.util.Iterator接口和ListIterator接口的区别:

1) Iterator又称迭代器,在使用List或是Set的时候我们进行使用迭代器取出集合中的数据,我们不需要干涉遍历的过程,只需要对取出的数据进行处理就行。

ListIterator有add()方法,可以向List中添加对象;Iterator不可以add;

2) ListIterator有hasNext()、next()方法以及hasPrevious()、previous()方法实现顺序遍历和逆向遍历;而Iterator只支持顺序遍历。

3) ListIterator可以定位当前索引的位置,通过nextIndex()、previousIndex()方法实现;而Iterator不支持此功能。

4) 都可以删除对象remove()方法。ListIterator可以实现修改对象。set()方法可以实现,

Iterator只能遍历,不能修改。

注意:set()方法API上面写的很清楚,用新元素取代next或previous上次访问的元素。否则的话将抛出IllegalStateException。


关于Vector和ArrayList的比较这里就不记录了。区别很简单Vector类的所有方法都是同步的。但是ArrayList方法不是同步的。在不需要同步时使用ArrayList,因为Vector要在同步操作上消耗大量时间。可以写一个简单的线程类分别用ArrayList和Vector测试一下。


需要知道java.util.Collection是一个集合类的接口,它提供了对集合对象基本操作的通用接口方法;java.util.Collections是一个包装类,它包含有关集合操作的静态方法,此类不能实例化。用Collections类可以按照特定发业务语义将对象进行排序。我们常用的方法是写一个比较器实现Comparator接口。通过Collections中的以下方法实现对象的排序:


public static <T> void sort(List<T> list, Comparator<? super T> c) {
	Object[] a = list.toArray();
	Arrays.sort(a, (Comparator)c);
	ListIterator i = list.listIterator();
	for (int j=0; j<a.length; j++) {
	    i.next();
	    i.set(a[j]);
}

 

对于集合平时常用的就是HashSet和TreeSet,HashSet类实现了基于散列表的集,访问集合中的元素是无序的,且不能添加重复的元素。TreeSet比HashSet有所改进,它是一个有序的集合,可以以任意的顺序将元素插入到集合中,在对集合遍历的时候每个值将自动按排序后的顺寻呈现。如果不需要对数据排序就没有必要付出排序的开销。一般情况下,使用TreeSet需要对数据进行排序,如果是整数的比较直接可以返回差值:


Set set = new java.util.TreeSet(new Comparator() {
	@Override
	public int compare(Object o1, Object o2) {
		// 结果按照降序排列
		return (Integer)o2 - (Integer)o1;
	}
			
});

 

Map接口下两个常用的实现类:HashMap、TreeMap。HashMap是基于哈希表的Map接口的非同步实现,此类允许使用null键和null值但不保证映射的顺序不变。HashMap是一种"链表散列"的数据结构,即数组和链表的结合体。可以简单是理解为HashMap底层就是一个数组结构,数组中每一项又是一个链表。

Map有三种常用的遍历方式:

方式一、entrySet


for(Map.Entry<String, String> entry:map.entrySet()){
	String key = entry.getKey();
	String value = entry.getValue();
	System.out.println("Map中的键:"+ key +"值:"+value);
}

 

方式二、keySet


Set<String> keys = map.keySet();
for(String k:keys){
	System.out.println("Map中的键:"+ k +"值:"+ map.get(k));
}

方式三、直接遍历values

 //直接遍历Map中的值
Collection values = map.values();  
Iterator iter = values.iterator();  
while(iter.hasNext()){  
     System.out.println(iter.next());  
}  

使用HashMap需要主要在多线程环境下的并发问题,都知道HashMap是非线程安全的,也就是说在多线程的环境中get()、put()、remove()等操作都是非线程安全的,在不能保证数据一致性的情况下迭代器会抛出ConcurrentModificationException异常。


一些资料显示,当需要使用同步时用Hashtable,否则用HashMap避免不必要的同步开销。HashMap和Hashtable存在一些区别:

1、Hashtable中的方法是同步的,可以不采用任何特殊的行为就可以在一个多线程的应用程序中使用Hashtable;

2、HashMap是JDK1.2引入进来的类,而Hashtable是继承于Dictionary类;

3、还有一点是HashMap如果put(null,null)之后进行get(null)是不会抛出空指针异常;而Hashtable则会抛出空指针异常。

 

分享到:
评论

相关推荐

    中职数学集合复习课PPT课件.pptx

    中职数学集合复习课PPT课件 知识点一:集合的表示方法 集合可以用三种方法表示: 列举法:将集合的元素一一列举出来,写在大括号中。适用于有限集。 描述法:用确定条件表示某些对象是否属于这个集合。适用...

    蓝桥杯复习题目集合

    【标题】"蓝桥杯复习题目集合"是一个针对编程竞赛准备的资源包,主要涵盖了C语言和Java语言的算法题目及解答。这个压缩包显然旨在帮助参赛者或对算法学习有兴趣的人进行训练和复习,以提升他们在ACM(国际大学生程序...

    排序算法集合类

    经典算法集合类文件,可以用于学习,复习,研究,练习等等

    .net面试题集合 便于复习

    .NET面试题集合是一个非常有用的资源,对于准备.NET技术面试或者想要深入理解.NET框架的开发者来说,这是一个很好的学习工具。这份资料可能包含了各种类型的面试题目,涵盖了.NET的基础概念、C#编程语言、ASP.NET ...

    01大数据面试复习----Java基础---集合类、多线程、JVM.zip

    在准备大数据面试的过程中,Java基础是必不可少的一部分,尤其聚焦于集合类、多线程和JVM这三大核心领域。下面将分别对这三个方面进行深入探讨。 **一、Java集合类** Java集合框架是处理对象组的重要工具,它包括...

    E04_集合复习.pdf

    不同的集合类有不同的特点: - `ArrayList`:基于数组实现,查询速度快,增删慢,线程不安全,效率较高。 - `Vector`:与`ArrayList`类似,但线程安全,效率较低。 - `LinkedList`:基于链表实现,查询慢,增删快,...

    高考数学一轮复习集合与映射专题复习指导.docx

    【高考数学一轮复习集合与映射专题复习指导】 在高考数学的复习阶段,集合与映射是基础且重要的概念,通常以选择题和填空题的形式出现。这部分内容不仅涉及集合的基本运算,如交集、并集和补集,还常常与其他数学...

    大数据面试复习总结

    大数据面试复习---Java基础---集合类、多线程、JVM 大数据面试复习----常问问题分析 大数据面试复习----画重点----思维导图 大数据面试复习----简历编写 大数据面试复习----练习的面试题+笔试题 大数据面试复习----...

    Java程序设计基础分类复习(答案)

    Java的标准库包含大量类和接口,如集合、I/O、网络、日期时间、数学运算等,提供了丰富的功能。 复习过程中,应注重理论与实践相结合,通过编写小程序来加深理解,同时多做练习题,提升解决问题的能力。这份"Java...

    517.515.JAVA基础教程_集合-复习:枚举类(517).rar

    本教程将深入探讨Java枚举类的概念、用法以及在集合中的应用。 一、枚举类的概念 枚举类是Java 5引入的新特性,它允许我们创建具有预定义值的类型安全的类。枚举不是简单的常量集合,而是一个完整的类,可以拥有...

    高二数学集合复习PPT课件.pptx

    本课件主要针对高二学生复习集合相关知识,旨在加深理解和应用。 1. 集合的基本概念:集合是由一些特定元素组成的整体,每个元素是独一无二的。例如,集合A可以包含所有偶数,集合B可以包含所有素数。集合的元素...

    第一讲集合经典难题复习巩固.pdf

    这些基础知识在计算机科学中有着广泛的应用,如数据结构中的集合类、数据库查询的集合操作、图论中的顶点集和边集等。理解并熟练掌握集合论的概念和运算,将有助于我们在编程、算法设计和问题求解中更加得心应手。 ...

    集合与函数复习讲义归类.pdf

    在复习和学习集合与函数时,不仅要理解基本概念,还要掌握相应的解题方法和技巧,例如分类讨论、利用图形辅助理解和建立方程等。通过对经典例题的分析和解答,可以深化理解,提高解决问题的能力。在高中数学考试中,...

    高考数学集合与映射专题复习指导.docx

    解这类问题时,需先理解不等式的解集,再结合集合的定义求解b的值。 总之,集合与映射的复习不仅要求理解基本概念,还需要灵活运用各种方法解题。考生在复习过程中,应注重基础理论的巩固,同时培养抽象思维能力和...

    知识讲解_集合全章复习及巩固.doc

    在《集合》全章复习巩固中,我们关注以下几个核心要点: 1. **集合的概念**:集合是由一些特定对象组成的整体,这些对象称为元素。例如,1~10内的所有质数构成了一个集合,其中元素包括2, 3, 5, 7。集合的特点包括...

    集合与命题综合复习.doc

    "集合与命题综合复习" 本文主要讲解集合和命题相关的知识点,旨在帮助学生掌握集合的概念、表示法、运算律,及其在数学问题中的应用。 一、集合的概念和表示法 集合是数学中最基本的概念之一,指的是具有某种特征...

    山东省2014届高三数学一轮复习考试试题精选(1)分类汇编1 集合

    集合是数学的基础概念,主要研究对象的集合论在数学中占据着极其重要的地位。在高考数学的复习过程中,集合部分的考察通常...在高三的一轮复习中,这类试题的精选和分类汇编有助于学生系统地复习和巩固集合的相关知识。

    计算机保研数学类复习指南

    计算机保研数学类复习指南 本指南涵盖了大学数学知识的主要领域,包括数学面试汇总、函数和映射、极限与连续、导数和微分、积分、解析几何、级数、欧拉公式、代数、概率论等。 数学面试汇总 数学面试汇总是计算机...

    数学集合复习课北师必修PPT学习教案.pptx

    在这个北师大必修的数学集合复习课中,我们主要关注以下几个知识点: 1. **列举法表示集合**: 集合可以用列举法来表示,即将集合内的所有元素一一列出。例如,集合`{(2,4), (5,2), (8,0)}`表示一个由有序对组成的...

    java_复习题库java_复习题库

    理解这些集合类的特性和用途,以及泛型的概念,对于编写高效代码至关重要。 5. **IO流**:输入/输出流是处理数据传输的关键,包括文件操作、网络通信等。学习Reader、Writer、InputStream、OutputStream家族,以及...

Global site tag (gtag.js) - Google Analytics