`
lixiongzhi_m
  • 浏览: 60939 次
  • 性别: 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集合框架使用总结 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档。 一、概述 数据结构对程序设计...

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

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

    corejava集合框架学习总结.pdf

    (六)集合框架学习总结.pdfcorejava集合框架学习总结.pdfcorejava集合框架学习总结.pdfcorejava集合框架学习总结.pdfcorejava集合框架学习总结.pdfcorejava集合框架学习总结.pdfcorejava集合框架学习总结.pdf

    Java容器框架 collection集合

    java集合框架总结 Collection体系结构 ArrayList源码解读 HashMap HashSet 深入讲解java集合框架

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

    本文档先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。 Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架...

    java 集合总结

    Java 集合框架总结 特别详细,深入剖析

    Java集合框架学习笔记

    Java集合框架做深入浅出的分析,有系统总结,以及常见错误等等

    Java集合框架总结:TreeSet类的排序问题

    TreeSet会调用集合元素的compareTo(Objectobj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提:两个对象的类型相同)。java提供了一个Comparable接口,该接口里定义了...

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

    集合框架底层数据结构总结 先来看⼀下 Collection 接⼝下⾯的集合。 List Arraylist : Object[] 数组 Vector : Object[] 数组 LinkedList : 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环) Set HashSet ...

    day20(集合框架)教案.doc

    java集合框架的知识总结,内含代码讲解,知识点概括,带你更好理解java集合框架。。。。像Map集合的概念,遍历方式等

    Java三大框架总结

    Servlet总结.doc hibernate总结.doc 集合总结.doc Spring.doc Ajax总结.doc 有关于Java三大框架的知识点总结

    Java集合框架使用总结.pdf

    农民专业合作社土地入股合同.pdf

    集合框架.xmind

    超详细的集合框架总结,用法,比较,一网打尽java集合内容!超详细得集合框架知识图谱,如果你下载你会感觉超值

Global site tag (gtag.js) - Google Analytics