一.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的迭代器IteratorPublic 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
分享到:
相关推荐
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
本文档为本人学习 java 集合框架期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!
### Java集合框架使用总结 #### 前言 本文旨在为读者提供关于Java集合框架的概览性介绍,帮助理解其整体架构与设计理念。对于希望深入掌握特定接口或类使用方法的学习者,建议查阅官方提供的Java API文档。 #### ...
总结来说,Java集合框架为开发者提供了丰富的数据结构选择,能够适应各种场景下的数据处理需求。理解并熟练使用这些接口和类,对于提高代码的效率和可维护性至关重要。在实际开发中,根据具体需求选择合适的容器类型...
根据提供的文档内容,文件是关于Java集合框架的面试题知识点总结。以下是Java集合框架的知识点详述: Java集合框架主要包括Collection接口和Map接口两大分支。Collection接口主要包括List、Set以及Queue三个子接口...
JAVA集合框架,java框架总结,java集合框架,java集合框架学习,java集合框架类
总结来说,理解数据结构和掌握Java集合框架是每个Java开发者必备的技能。它们不仅影响代码的可读性和可维护性,也直接影响到程序的执行效率。熟悉这些概念并能灵活运用,将使你在编程实践中更加游刃有余。通过阅读如...
根据提供的信息,我们可以总结并详细解释关于Java集合框架的一些关键知识点。这些知识点主要涉及Java集合框架中的各种数据结构,如List、Set、Map等,并深入探讨了它们在实际应用中的特性与用途。 ### Java集合框架...
Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组高效的数据结构和算法,使得开发者可以方便地管理和操作数据。本文主要围绕Java集合框架的核心概念、接口和类进行阐述。 首先,集合框架是Java中用于...
### 核心Java集合框架学习总结 #### 一、概述 在Java编程语言中,集合框架是一组用于存储和操作对象的接口和类。这些接口和类提供了多种数据组织方式,如列表、集合并和映射等。本篇文章将重点介绍集合框架中的几...
"Java集合框架面试题" Java 集合框架是 Java 语言中的一组预定义类和接口的集合,用于存储和操作数据。下面是 Java 集合框架的知识点总结: 1. Java 集合类主要有两大分支:Collection 接口和 Map 接口。...
Java 集合框架知识点总览 Java 集合框架是 Java 语言中提供的一种处理集合的机制,它提供了一种灵活、可靠、可扩展的方式来存储和操作对象的集合。在本章节中,我们将详细介绍 Java 集合框架的主要组成部分、使用...
总结来说,Java集合框架提供了丰富的数据结构选择,根据实际需求,如是否需要排序、是否关心元素顺序、是否需要线程安全、性能要求等,可以选择最合适的实现。理解这些接口和类的区别,能够帮助开发者编写更高效、更...
通过深入学习和理解这个集合框架总结图,开发者能够更好地掌握Java集合框架的核心原理,提高代码质量和效率,解决各种数据管理问题。无论是在面试准备还是实际项目开发中,这都是一份不可或缺的参考资料。
本篇文章将对Java集合框架进行深入的总结,包括其核心接口、类以及常用方法。 1. **集合框架概述** Java集合框架的核心接口主要有两个:`Collection`和`Map`。`Collection`接口是所有单值容器的基接口,如`List`、...