JAVA集合框架(精校版本)
- 格式:doc
- 大小:181.50 KB
- 文档页数:19
Java集合类的整体框架如下:从上图中可以看出,集合类主要分为两⼤大类:Collection和Map。
Collection是List、Set等集合⾼高度抽象出来的接⼝口,它包含了了这些集合的基本操作,它主要⼜又分Set接⼝口通常表示⼀一个集合,其中的元素不不允许重复(通过hashcode和equals函数保证),常⽤用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,⽽而TreeSet是通过Map 中的TreeMap实现的。
另外,TreeSet还实现了了SortedSet接⼝口,因此是有序的集合(集合中的元素要实现Comparable接⼝口,并覆写Compartor函数才⾏行行)。
我们看到,抽象类AbstractCollection、AbstractList和AbstractSet分别实现了了Collection、List和Set接⼝口,这就是在Java集合框架中⽤用的很多的适配器器设计模式,⽤用这些抽象类去实现接⼝口,在抽象类中实现接⼝口中的若⼲干或全部⽅方法,这样下⾯面的⼀一些类只需直接继承该抽象类,并实现⾃自⼰己需要的⽅方法即可,⽽而不不⽤用实现接⼝口中的全部抽象⽅方法。
Map是⼀一个映射接⼝口,其中的每个元素都是⼀一个key-value键值对,同样抽象类AbstractMap通过适配器器模式实现了了Map接⼝口中的⼤大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不不常⽤用的HashTable直接实现了了Map接⼝口,它和Vector都是JDK1.0就引⼊入的集合类。
Iterator是遍历集合的迭代器器(不不能遍历Map,只⽤用来遍历Collection),Collection的实现类都实现了了iterator()函数,它返回⼀一个Iterator对象,⽤用来遍历集合,ListIterator则专⻔门⽤用来遍历List。
Java集合框架汇总1.集合框架结构图 (1)2.两种特殊的Java容器类List和Set分析 (2)3. Collection 接口: (2)4.Iterator 接口: (3)5.List接口: (3)5.1 LinkedList类: (5)5.2 ArrayList类: (5)6.Set接口: (5)7.Map接口: (6)8.Comparable接口和Comparator接口: (7)9. 集合框架面试题 (7)1.集合框架结构图集合接口说明:Collection 接口是一组允许重复的对象。
List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
Map接口是一组成对的键-值对象,即所持有的是key-value pairs。
Map中不能有重复的key。
拥有自己的内部排列机制。
容器中的元素类型都为Object。
从容器取得元素时,必须把它转换成原来的类型。
2.两种特殊的Java容器类List和Set分析容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。
Java2容器类类库的用途是“保存对象”,它分为两类:------Collection||---------------List(可以重复)|----------------Set(不能重复)------Map(键值对)Collection---- 一组独立的元素,通常这些元素都服从某种规则。
List必须保持元素特定的顺序,而Set不能有重复元素。
Map---- 一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。
另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。
集合框架1. JAVA 集合框架的组成三部分: 接口,接口的实现类,算法类(工具类)接口如:Collection,List,Map实现类:ArrayList,LinkedList,HashMap等算法类:Collections,Arrays如上图所示接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。
可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
左下角即为算法类.在JAVA 集合中又主要分为这三种类型Set和List集合接口(两者同属 Collection 接口下的 )和Map接口Set(集) 接口类型:集合中的对象没有特定的方式排序,没有重复对象,但它的某些实现类能对集合中的对象按特定方式排序。
List(列表) 接口类型:是有序的Collection,集合中的对象按照索引位置排序,可以有重复对象,可以按对象在集合中的索引位置检索对象,与数组类似。
Map(映射) 接口类型:集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。
它的有些实现类能够对集合中的键对象进行排序。
有趣的是Collection接口不提供随机访问元素的get()方法。
因为Collection 包括Set,而Set自己维护内部顺序。
如果想检查Collection中的元素,那就必须使用迭代器。
而List接口中则出现了 get(int index)方法,其实现类 ArrayList和LinkedList也就实现了这个方法。
另外 Collection 接口的iterator() 和 toArray()方法都用于获得集合中的所有元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组.Iterator接口隐藏底层集合的数据结构,向客户程序提供了遍历各种类型的集合的统一接口。
hasNext()判断是否遍历完毕,next()返回下一个元素等等。
java的集合框架最全详解(图)纯个⼈整理,如有错误请指正。
java的集合框架最全详解(图)前⾔:数据结构对程序设计有着深远的影响,在⾯向过程的C语⾔中,数据库结构⽤struct来描述,⽽在⾯向对象的编程中,数据结构是⽤类来描述的,并且包含有对该数据结构操作的⽅法。
在Java语⾔中,Java语⾔的设计者对常⽤的数据结构和算法做了⼀些规范(接⼝)和实现(具体实现接⼝的类)。
所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework)。
Java程序员在具体应⽤时,不必考虑数据结构和算法实现细节,只需要⽤这些类创建出来⼀些对象,然后直接应⽤就可以了,这样就⼤⼤提⾼了编程效率。
1. 先说Set和List:1.1. Set⼦接⼝:⽆序,不允许重复。
List⼦接⼝:有序,可以有重复元素。
具体区别是Set:检索元素效率低下,删除和插⼊效率⾼,插⼊和删除不会引起元素位置改变。
<对应类有 HashSet,TreeSet>List:和数组类似,List可以动态增长,查找元素效率⾼,插⼊删除元素效率低,因为会引起其他元素位置改变。
<相应类有ArrayList,LinkedList,Vector>Set和List具体⼦类:2.2. <实例⽐较>HashSet:以哈希表的形式存放元素,插⼊删除速度很快。
ArrayList:动态数组,LinkedList:链表、队列、堆栈。
Vector是⼀种⽼的动态数组,是线程同步的,效率很低,⼀般不赞成使⽤1. Collection接⼝Collection是最基本的集合接⼝,⼀个Collection代表⼀组Object,即Collection的元素(Elements)。
⼀些 Collection允许相同的元素⽽另⼀些不⾏。
⼀些能排序⽽另⼀些不⾏。
Java SDK不提供直接继承⾃Collection的类,Java SDK提供的类都是继承⾃Collection的“⼦接⼝”如List和Set。
集合框架Java平台提供了一个全新的集合框架。
“集合框架”主要由一组用来操作对象的接口组成。
不同接口描述一组不同数据类型。
它们都封装在包中核心接口Java集合框架的核心接口有两种:Collection(聚集)和Map(映射)Collection 接口是一组允许重复的对象。
Set 中的数据对象没有顺序且不可以重复。
接口List中的数据对象有顺序且可以重复。
接口Map接口是一组成对的键-值对象,即所持有的是key-value pairs。
Map中不能有重复的key。
拥有自己的内部排列机制。
不能有重复的键Collection类提供了一些静态方法实现了基于List容器的一些常用算法void sort(List l) 对List容器内的元素排序void shuffle(List l) 对List容器内的对象进行随机排列void reverse(List l) 对List容器内的对象进行逆续排列void fill(List l, Object o)用一个特定的对象重写整个List容器void copy(List dest,List src)将src List容器内容拷贝到dest List容器int binarySearch(List l, Object o)对于顺序的List容器,采用折半查找的方法查找特定对象例题:List l1 = new LinkedList();List l2 = new LinkedList();for(int i=0; i<=9; i++) { ("a"+i); } 5”;public class MyStack {/*** List的实现类LinkedList* LinkedList存储时按照后进先出的原则*/private LinkedList<Object> stack=new LinkedList<Object>();/*** 把对象存入LinkedList的第一个位置*/public void push(Object o){(o);}/*** @param args* 把第一个位置的对象进行删除*/public Object pop(){return ();}/*** 取得LinkedList的第一个元素*/public Object peek(){return ();}public static void main(String[] args) {MyStack m=new MyStack();("wangwu");("zhangsan");("lisi");"现在箩筐顶部的元素是:"+());();"现在箩筐顶部的元素是:"+());}}ArrayList类import class TestArrayList {/*** List接口的第二个实现类,按照先进先出*/public static void main(String[] args) {ArrayList<String> list=new ArrayList<String>();("a");("b");("c");for (int i=0;i<();i++){String temp=(i);}}}——————————————————————————————————————————————————————————————————————————————————————————————————import Student{public String name;public int num;public String address;public Student(String name,int num,String address){=name;=num;=address;}public String getName() {return name;}public void setName(String name) {= name;}public int getNum() {return num;}public void setNum(int num) {= num;}public String getAddress() {return address;}public void setAddress(String address) {= address;}}public class Arrayzuoye {/*** 利用ArrayList来存储一个小学生类,学生类有学号,姓名,住址三个属相,实例化出一个学生“张三”。
第5章Java集合框架学习内容Java集合API泛型能力目标熟练使用Java集合API理解并会使用泛型本章简介在进行面向对象编程时,程序开发人员经常需要存储和处理大量的对象信息,而选择合适的数据存储方式至关重要。
Java为我们提供了集合框架来解决数据存储的问题。
Java集合可以存储复杂的对象数据,并能非常方便的实现对数据的增、删、改、查、等操作。
它提供了众多的接口和类,基本满足我们日常编程的需求。
本章重点讲解Java集合框架的结构和一些常用的API,包括List、Set、Map等接口及其实现类。
最后还会介绍在Java集合中被广泛使用的泛型。
核心技能部分5.1为什么需要集合假设现在我们需要存储新闻信息,包括新闻的标题、内容和作者等。
这时大家会很自然的想到使用第一阶段学过的数组,即先创建一个实体类news,然后再创建一个news类型的数组就行了。
但实际情况是:每天的新闻数量是不固定的,时刻都会发生变化,那存储新闻的数组应该设置多大的长度呢?与此类似的问题在实际应用中会经常遇到,这时数组的缺陷就比较明显了。
另外,数组在对数据进行增、删、改、查操作上效率低下。
在实际应用中,当我们遇到需要存储大量的、复杂的并且数量不定的数据时可以考虑使用Java中的集合框架。
5.2Java集合框架Java通过集合框架为程序开发人员提供了一套功能强大、性能优良、使用方便的接口和类,它们都位于java.util包中。
Java集合框架的主要内容及关系如图5.1.1所示。
图5.1.1Java集合框架Java集合框架是一个统一的体系结构,包含三块内容:接口、实现类和算法。
接口:图5.1.1的上半部分都是接口,包括Collection、List、Set、Map等。
实现类:图5.1.1的下半部分都是实现类,常见的包括ArrayList、HashMap等。
算法:提供了查找、排序等多种算法实现。
Java集合框架中的接口虽然都提供了存储大量、复杂数据的功能,但是它们之间也存在者明显的差别。
Java 集合框架1.简介早在 Java 2 中之前,Java 就提供了特设类。
比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。
虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。
由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。
集合框架被设计成要满足以下几个目标。
A.该框架必须是高性能的。
基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
B.该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
C.对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕一组标准接口而设计。
你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。
Java集合框架完整图例如下:从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一个用来代表和操纵集合的统一架构。
所有的集合框架都包含如下内容:接口:是代表集合的抽象数据类型。
例如 Collection、List、Set、Map 等。
之所以定义多个接口,是为了以不同的方式操作集合对象实现(类):是集合接口的具体实现。
从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。
java集合框架详解⼀、概述Java集合类主要由两个根接⼝Collection和Map派⽣出来的,Collection派⽣出了三个⼦接⼝:List、Set、Queue(Java5新增的队列),因此Java集合⼤致也可分成List、Set、Queue、Map四种接⼝体系,(注意:Map不是Collection的⼦接⼝)。
数据与集合的区别数组长度不可变化⽽且⽆法保存具有映射关系的数据;集合类⽤于保存数量不确定的数据,以及保存具有映射关系的数据。
数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。
⼆、CollectionUML图其中List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表⽆序不可重复集合,只能根据元素本⾝来访问;Queue是队列集合;Map代表的是存储key-value对的集合,可根据元素的key来访问value。
上图中淡绿⾊背景覆盖的是集合体系中常⽤的实现类,分别是ArrayList、LinkedList、ArrayQueue、HashSet、TreeSet、HashMap、TreeMap等实现类。
collection的APICollection 接⼝将对象组织到⼀起。
数组不能调整⼤⼩,并且只能组织相同类型的对象,⽽Collections允许添加任何类型的对象,并且不强迫你指定初始⼤⼩。
需要注意的重要的⼀点是, Collection 扩展了 Iterable 接⼝, Collection 从那⾥继承了 iterator ⽅法。
该⽅法返回⼀个 Iterator对象,可以⽤来遍历集合的元素。
我们还会学习如何使⽤ for 循环来遍历⼀个 Collection 的元素。
ListList集合代表⼀个有序、可重复集合,集合中每个元素都有其对应的顺序索引。
List集合默认按照元素的添加顺序设置元素的索引,可以通过索引(类似数组的下标)来访问指定位置的集合元素。
实现List接⼝的集合主要有:ArrayList、LinkedList、Vector、Stack。
集合框架Java平台提供了一个全新的集合框架。
“集合框架”主要由一组用来操作对象的接口组成。
不同接口描述一组不同数据类型。
它们都封装在java.util包中核心接口Java集合框架的核心接口有两种:Collection(聚集)和Map(映射)Collection 接口是一组允许重复的对象。
Set 中的数据对象没有顺序且不可以重复。
接口List中的数据对象有顺序且可以重复。
接口Map接口是一组成对的键-值对象,即所持有的是key-value pairs。
Map中不能有重复的key。
拥有自己的内部排列机制。
不能有重复的键Collection类java.util.Collections 提供了一些静态方法实现了基于List容器的一些常用算法 void sort(List l) 对List容器内的元素排序void shuffle(List l) 对List容器内的对象进行随机排列void reverse(List l) 对List容器内的对象进行逆续排列void fill(List l, Object o)用一个特定的对象重写整个List容器void copy(List dest,List src)将src List容器内容拷贝到dest List容器int binarySearch(List l, Object o)对于顺序的List容器,采用折半查找的方法查找特定对象例题:List l1 = new LinkedList();List l2 = new LinkedList();for(int i=0; i<=9; i++) { l1.add("a"+i); }System.out.println(l1);Collections.shuffle(l1); //随机排列System.out.println(l1);Collections.reverse(l1); //逆续System.out.println(l1);Collections.sort(l1); //排序System.out.println(l1);System.out.println(Collections.binarySearch(l1,“a5”)); //折半查找ListList接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复List 容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
集合框架的组织结构:collectionSet hashlistList arraylistLinkedlist集合框架就是一个框可以将各种对象放在里面。
看父接口的jdk看他们的方法。
一、集合框架分为两类* 1. Collection :存放许多单个对象,两个子接口Set List* Set中不能存放重复对象* List中存放的是有索引(有序,不是大小顺序)的对象List有两个实现类ArrayList ,LinkedListArrayList是基于数组实现的,查找快,但是增删改慢LinkedList基于链表实现的,增删改快,查找相对较慢* 2 .Map 存放的是键值对Vector ArrayList区别:Vector 线程安全,ArrayList线程不安全(安全就是不允许多线程同时访问集合,不安全就是运行多线程同时访问)Hashtable Hashset区别前者线程安全,后者不安全List类型,存入顺序是什么,在内存中的顺序就是什么List类型可以存重复值的,可以使用索引进行访问。
二、第一个类Arrays这个类包括了很多操作数组的静态方法,直接用类名调用对我们的数组进行操作。
//1.将数组变为List的方法List list = Arrays.a sList(is);//2二分搜索法?:在一个有序数组中,查找指定元素int index = Arrays.binarySearch(is, 2);//3.copyof 复制数组,复制前五个int[] is2 = Arrays.copyOf(is, 5);//4.copyRangeof复制指定部分int [] is3 = Arrays.copyOfRange(is, 2, 5); //5. f ill 填充,给指定数组进行数字填充int [] is4 = new int[8];//默认都是零Arrays.fill(is4, 8);for(int i : is4){System.out.println(i);}//6. 排序的方法,将数组中的数据进行自然排序三、Collections1、这个类提供了操作List类型的许多静态方法就像Arrays提供了操作数组类型的静态方法一样ArrayList<Person> list = new ArrayList<Person>(); list.add(p0);list.add(p1);list.add(p2); Collections.reverse(list);//对指定集合进行逆序操作Collections.shuffle(list);//将集合中的顺序打乱//排序Collections.sort(list);//自定义类要排序必须要实现Comparable接口2、排序要注意,其中的对象要实习排序,其类必须继承接口Collections.sort(list);//自定义类要排序必须要实现Comparable接口覆写这个方法public int compareTo(Person o) {// TODO Auto-generated method stubif(pid > o.pid)return 1;//如果是负数就是逆序,按照人的id进行比较。
集合框架
➢Java平台提供了一个全新的集合框架。
“集合框架”主要由一组用来操作对象的接口组成。
不同接口描述一组不同数据类型。
它们都封装在java.util包中
核心接口
➢Java集合框架的核心接口有两种:Collection(聚集)和Map(映射)
➢Collection 接口是一组允许重复的对象。
➢Set 中的数据对象没有顺序且不可以重复。
接口
➢List中的数据对象有顺序且可以重复。
接口
➢Map接口是一组成对的键-值对象,即所持有的是key-value pairs。
Map中不能有重复的key。
拥有自己的内部排列机制。
不能有重复的键
Collection
➢类java.util.Collections 提供了一些静态方法实现了基于List容器的一些常用算法➢void sort(List l) 对List容器内的元素排序
➢void shuffle(List l) 对List容器内的对象进行随机排列
➢void reverse(List l) 对List容器内的对象进行逆续排列
➢void fill(List l, Object o)
➢用一个特定的对象重写整个List容器
➢void copy(List dest,List src)
➢将src List容器内容拷贝到dest List容器
➢int binarySearch(List l, Object o)
➢对于顺序的List容器,采用折半查找的方法查找特定对象
例题:
List l1 = new LinkedList();
List l2 = new LinkedList();
for(int i=0; i<=9; i++) { l1.add("a"+i); }
System.out.println(l1);
Collections.shuffle(l1); //随机排列
System.out.println(l1);
Collections.reverse(l1); //逆续
System.out.println(l1);
Collections.sort(l1); //排序
System.out.println(l1);
System.out.println(Collections.binarySearch(l1,“a5”)); //折半查找List
➢List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复
➢List 容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
➢List 接口中所定义的方法:
➢Object get(int index);
➢Object set(int index, Object element);
➢void add(int index, Object element);
➢Object remove(int index);
➢int indexOf(Object o);
➢int lastIndexOf(Object o); ————————————————————————————————————————————————————————————————————————————————————————————————————————————
List接口的实体类——LinkList类
➢第一步,确定存储方式。