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来存储一个小学生类,学生类有学号,姓名,住址三个属相,实例化出一个学生“张三”。
集合框架
➢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类
➢第一步,确定存储方式。