`
lixiongzhi_m
  • 浏览: 62150 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

java集合框架总结

 
阅读更多
一.Conllection
  Conllection是java.util下的接口,是java中集合的父接口,谈到Conllection,我们就会想起Conllections,他们有什么区别,Conllections是java.util下的一个类,包含着java中对集合操作的各种静态方法。而这次蓝杰上课主要讲了Conllection接口下几个常用和比较重要的接口和这些接口下的几个实现类,下面主要介绍这几个接口和类的用法和区别。


二,Conllection下的子接口
 
1.Set
  2.List
注意点:Map不是Conllection的子接口。


三.Set的常用实现类及用法  1.Set是没有重复项目无序的集合(及Set中没有重复的元素)
  2.set接口下常用的实现类有HashSet、LinkedHashSet、TreeSet。
下面以HashSet为实例介绍Set用法。
 

  Set是接口所以是不能用来实例化对象的,所以实例化对象用其实现类
        Set set=new HashSet(); 这样一个Set对象就有了。


  我们知道集合的作用是我们可以利用它来放置元素,下面以元素(Student类对象)为实例介绍如何向Set中添加元素。 由于java中为集合都提供的泛型机制,所以上面的实例化可以修改成
   Set<Student> set=new HashSet();
set中提供了添加元素add()方法,所以set.add(new Student());便可完成对元素的添加
 

   那么怎么在set中寻找到我们需要的元素呢?
这个要求遍历set,和数组不一样,set中元素是无序的,所以一个简单的for循环使不能遍历set的,java中为set提供了遍历set的迭代器Iterator
Public interface Iterator{ 

    Public Boolean hasNext(}; 

    Public Object next(}; 

    Public void remove(}; 

}  

hashNext(),下一个位置是否有元素,有便返回true,否则返回false,
next(),返回下一个元素
remouve()删除下一个元素
有了这个迭代器和这些方法我们就可以实现在set寻找元素了。
以下是代码:
//获取迭代器
		Iterator iterator=hashset.iterator();
                   while(iterator.hasNext()){
			Student stu=(Student) iterator.next();
			if(stu.getScore()==score){
				System.out.println(stu.toString());
			}
		}



同样的要删除set中指定的元素,调用remove方法就行了,代码如下:
//获取迭代器
		Iterator iterator=hashset.iterator();
		//实例化一个新的Hashset对象,用来存储要删除的对象
		HashSet hashset2=new HashSet();
		while(iterator.hasNext()){
			//获取学生对象
			Student stu=(Student) iterator.next();
			if(stu.getScore()<score){
				iterator.remove();
			}
		}

set中还提供了removeall(Conllect<> c),方法,所以在删除学生时,可以再实例化一个新的set对像,将符合条件的学生先保存在新的set对象中,在调用removeall()方法同样也可以实现。
注意:不能在利用iterator得到符合条件的学生对象时,用set.remove(stu);来删除学生对象,这样是不允许的。这样做会抛出“ConcurrentModificationException”这样的异常,当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。


四、List有序允许有重复元素的集合
常用实现类有:ArrayList、LinkedList
ArrayList的用法和Vector相差无几,用for循环便能完成迭代。故利用ArrayList对学生信息的增删改查这边就不做介绍。
注意点在迭代时,因为每次删除一个元素后,ArrayList的长度也就相应的减少了1,所以如果简单的用for(int i=0;i<arraylist.size();i++){}这样去迭代是不行了,因为每次去掉一个元素,arraylist中的所有元素就进了以为,当再i++时就一次跳过两次就使有些元素没有做判断,直接跳过了。所以i++只能放在没有删除元素的条件下进行.
以下是代码:
//定义一个删除学生信息的方法
	public void remove(ArrayList<Student> arraylist,int score){
		//遍历arraylist删除学生学分小于score的学生信息
		for(int i=0;i<arraylist.size();){
			//获取学生对象
			Student stu=arraylist.get(i);
			if(stu.getScore()<score){
				arraylist.remove(i);
			}else{
				i++;
			}
		}
	}


五、Map 用于关键字/数值对,像个Dictionary 
常用实现类:HashMap、LinkedHashMap、TreeMap
要用Map实现对学生信息的增删改查和上面所介绍的差别比较大,Map中没有add()方法,与之对应的是put(key,value)方法,参数是一对k-v组合。而要获取map中指定元素只能用get(key)方法,该方法返回与key对应的value,所以在对学生信息查找和删除这一块要利用到map中keyset()方法,获取存储key的set,利用set便可获取我们要查找和删除的value对应的key,在利用remove(key),便可完成我们要的操作。
下面是代码:
//定义录入学生信息的方法
	public void mapAdd(Map<String,Student> map){
		//实例化一个产生随机数的对象,给学生的学分赋值
		Random rand=new Random();
		 //实例化学生对象
		for(int i=0;i<20;i++){
			Student stu=new Student("姓名是:"+(char)(65+i),rand.nextInt(20));
			map.put(stu.getName(), stu);
		}		
		}

//定义查找学生信息的方法
	public void chaozhao(Map<String,Student> map,int score){
		//获取keyset
		Set<String> set=map.keySet();
		//获取set中的迭代器
		Iterator<String> iterator=set.iterator();
		System.out.println("学分为"+score+"的学生是:");
		//利用迭代器进行迭代
		while(iterator.hasNext()){
			//获取key
			String key=iterator.next();
			//根据key获取学生对象
			Student stu=map.get(key);
			if(stu.getScore()==score){
				//输出符合条件学生的信息
				System.out.println(stu.toString());
			}
		}
	} 

public void remove(Map<String,Student> map,int score){
		//获取map中keyset
		Set<String> set=map.keySet();
		//从获取的keyset中获取迭代器
		Iterator<String> iterator=set.iterator();
		//利用迭代器进行迭代
		while(iterator.hasNext()){
			//获取key对象
			String key=iterator.next();
			//根据key获取学生对象
			Student stu=map.get(key);
			if(stu.getScore()<score){
				iterator.remove();
			}
		}
		
	}

结合上面对set的操作,就显得非常简单了,map对学生信息的增删改查不是直接的,而是利用keyset(),而后利用这个set里面的key,在调用remove(),get()等方法间接完成操作。







以下是我在网上找到的一些关于java集合框架的介绍:
浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes)。集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题。
1 Collection 和 Collections的区别。
2 List, Set, Map是否继承自Collection接口。
3 ArrayList和Vector的区别。
4 HashMap和Hashtable的区别。 

篇尾有答案,我们开始正题。  

集合Collection接口  

--Collection 是任何对象组,元素各自独立,通常拥有相同的套用规则。Set List由它派生。


基本操作  增加元素add(Object obj); addAll(Collection c);  

删除元素 remove(Object obj); removeAll(Collection c); 

求交集 retainAll(Collection c); 

删除元素 remove(Object obj); removeAll(Collection c); 

求交集 retainAll(Collection c);  

访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)

Public interface Iterator{

   Public Boolean hasNext(};

    Public Object next(};

    Public void remove(};

} 集set --没有重复项目的集合  

有三种特定类型的集可用 

HashSet-基于散列表的集,加进散列表的元素要实现hashCode()方法  

LinkedHashSet-对集迭代时,按增加顺序返回元素 

TreeSet-基于(平衡)树的数据结构    

清单List  --位置性集合。加进清单的元素可以加在清单中特定位置或加到末尾  

有两个特定版本


ArrayList(数组表)-类似于Vector,都用于缩放数组维护集合。区别:

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 

LinkedList(链表)-是双向链表,每个节点都有两个指针指向上一节点和下一节点。 

用在FIFO,用addList()加入元素 removeFirst()删除元素
用在FILO,用addFirst()/removeLast()  

ListIterator提供双向遍历next() previous(),可删除、替换、增加元素  

映射表Map  
--用于关键字/数值对,像个Dictionary  

处理Map的三种集合  

关键字集KeySet()  

数值集value() 

项目集enrySet()  

四个具体版本

HashMap-散列表的通用映射表 

LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序  

WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它 

TreeMap-基于平衡树的映射表  

HashMap-散列表的通用映射表  

LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序  

WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它 

TreeMap-基于平衡树的映射表 
Collections类,用于同步集合,还能改变集合只读方式的类
e.g.:


Map mp=new HashMap();

mp=Collections.synchronizedMap(mp); //生成线程安全的映射表

mp=Collections.unmodifiableMap(mp); //生成只读映射表 Comparable 自然顺序的排序类 Comparator 面向树的集合排序类  

容器分类学(Container taxonomy)  

集合接口: Collection List Set;Map Iterator ListIterator。 

抽象类: AbstractCollection AbstractList AbstractSet AbstractMap AbstractSequentiaList。

老版本中的集合类型 

Vector类  

Vector,就是向量。一种异构的混合体,可以动态增加容量。对它的操作简要如下 

比如我们有一个Vector: Vector myVec=new Vector(a_Array.length)  

取得vector的长度:myVec.size(); 

赋值:set(int position,Object obj) / setElementAt(Object obj, int position) –不支持动态增长  

      add(Object obj )/ addElement(Object obj) 在Vector末尾加入对象  

e.g.:myVec.add(new a_Array[0]); 

取出元素:get(int position) / getElement(int position)

Stack类 

是Vector的子类。就是数据结构里讲滥了的堆栈(这个词可简称栈,不要混淆于heap-堆)。后进先出的存取方式。  

Stack()构造空栈 

Empty()叛空  

Search()检查堆栈是否有元素 

Peek()取得栈顶元素 

Pop()弹栈 

Push()入栈  

Enumeration接口  

Dictionary类  

字典。关键字/数值方式存取数据,如果映射没有此关键字,取回null。

Hashtable类 

是Dictionary结构的具体实现。  

面试题答案  

Collection 和 Collections的区别。  

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。  

Collection是个java.util下的接口,它是各种集合结构的父接口

List, Set, Map是否继承自Collection接口? List,Set是 Map不是  

ArrayList和Vector的区别。
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半  

HashMap和Hashtable的区别 
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 



二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 



三.值:只有HashMap可以让你将空值作为一个表的条目的key或value


分享到:
评论
2 楼 lixiongzhi_m 2012-07-16  
下面那些是网上找的,感觉不错就弄过来了。。
1 楼 lusheng0596 2012-07-16  
哇,加了好多!佩服

相关推荐

    Java集合框架总结

    ### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...

    JAVA集合框架学习总结

    本文档为本人学习 java 集合框架期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!

    Java集合框架使用总结

    ### Java集合框架使用总结 #### 前言 本文旨在为读者提供关于Java集合框架的概览性介绍,帮助理解其整体架构与设计理念。对于希望深入掌握特定接口或类使用方法的学习者,建议查阅官方提供的Java API文档。 #### ...

    Java集合框架详解

    总结来说,Java集合框架为开发者提供了丰富的数据结构选择,能够适应各种场景下的数据处理需求。理解并熟练使用这些接口和类,对于提高代码的效率和可维护性至关重要。在实际开发中,根据具体需求选择合适的容器类型...

    Java集合框架常见面试题.pdf

    根据提供的文档内容,文件是关于Java集合框架的面试题知识点总结。以下是Java集合框架的知识点详述: Java集合框架主要包括Collection接口和Map接口两大分支。Collection接口主要包括List、Set以及Queue三个子接口...

    JAVA集合框架学习思考+总结

    JAVA集合框架,java框架总结,java集合框架,java集合框架学习,java集合框架类

    数据结构和Java集合框架

    总结来说,理解数据结构和掌握Java集合框架是每个Java开发者必备的技能。它们不仅影响代码的可读性和可维护性,也直接影响到程序的执行效率。熟悉这些概念并能灵活运用,将使你在编程实践中更加游刃有余。通过阅读如...

    Java集合框架常见面试题夜间阅读版.pdf

    根据提供的信息,我们可以总结并详细解释关于Java集合框架的一些关键知识点。这些知识点主要涉及Java集合框架中的各种数据结构,如List、Set、Map等,并深入探讨了它们在实际应用中的特性与用途。 ### Java集合框架...

    Java集合框架使用总结.pdf

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组高效的数据结构和算法,使得开发者可以方便地管理和操作数据。本文主要围绕Java集合框架的核心概念、接口和类进行阐述。 首先,集合框架是Java中用于...

    corejava集合框架学习总结.pdf

    ### 核心Java集合框架学习总结 #### 一、概述 在Java编程语言中,集合框架是一组用于存储和操作对象的接口和类。这些接口和类提供了多种数据组织方式,如列表、集合并和映射等。本篇文章将重点介绍集合框架中的几...

    Java集合框架面试题

    "Java集合框架面试题" Java 集合框架是 Java 语言中的一组预定义类和接口的集合,用于存储和操作数据。下面是 Java 集合框架的知识点总结: 1. Java 集合类主要有两大分支:Collection 接口和 Map 接口。...

    第03章.java集合框架.ppt

    Java 集合框架知识点总览 Java 集合框架是 Java 语言中提供的一种处理集合的机制,它提供了一种灵活、可靠、可扩展的方式来存储和操作对象的集合。在本章节中,我们将详细介绍 Java 集合框架的主要组成部分、使用...

    java集合框架详解以及区别

    总结来说,Java集合框架提供了丰富的数据结构选择,根据实际需求,如是否需要排序、是否关心元素顺序、是否需要线程安全、性能要求等,可以选择最合适的实现。理解这些接口和类的区别,能够帮助开发者编写更高效、更...

    集合框架总结图

    通过深入学习和理解这个集合框架总结图,开发者能够更好地掌握Java集合框架的核心原理,提高代码质量和效率,解决各种数据管理问题。无论是在面试准备还是实际项目开发中,这都是一份不可或缺的参考资料。

    Java集合框架的知识总结.doc

    本篇文章将对Java集合框架进行深入的总结,包括其核心接口、类以及常用方法。 1. **集合框架概述** Java集合框架的核心接口主要有两个:`Collection`和`Map`。`Collection`接口是所有单值容器的基接口,如`List`、...

Global site tag (gtag.js) - Google Analytics