集合

发布时间:   来源:文档文库   
字号:


一、数组、集合(区别
数组、集合:都是一种容器.
数组:不能自动增长;只能存放同类型的元素
集合:能自动扩容;部分集合允许存放不同类型的元素;注:集合中只能装对象,不能装基本数据类型;(装箱)二:集合的共性接口(Collection
集合容器因为内部的数据结构不同,有多种具体容器。不断的向上抽取,就形成了集合框架。
框架的顶层Collection接口:以及常用方法:1:添加
booleanadd(Objectobj;booleanaddAll(Collectioncoll;
2:删除
booleanremove(Objectobj;booleanremoveAll(Collectioncoll;voidclear(;
3:判断
booleancontains(Objectobj;
booleancontainsAll(Collectioncoll;booleanisEmpty(;//判断集合中是否有元素
4:获取intsize()
Iteratorit(;//取出元素的方式迭代器


5:其他
booleanretain(Collectioncoll;取交集Object[]toArray(;将集合转成数组
collection:
--:List有序(存入和取出的顺序一致;元素都有索引(角标),元素都可以重复)--Set元素不能重复,无序
List常见特有方法:可以对角标进行操作1:添加voidadd(index,element;voidadd(index,collection;2:删除objectremoveindex3:修改objectset(index,element;4:获取:objectget(index;intindexOf(object;intlastIndexOf(object;ListsubList(from,to;
问题:修改时的迭代问题,
Exceptioninthreadjava.util.ConcurrentModificationException

"main"
系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIteratorList:
--Vector:内部是数组数据结构(同步的)效率低
--ArrayList::内部是数组数据结构(是不同步的)效率高,替代了Vector;查询快--LinkedList:内部是链表数据结构(是不同步的);增删元素特别快
线程安全的就是同步的,不安全的就是不同步的,还有一点就是,不同步的运行速度要比同步的快,这是因为有锁的机制存在。(多线程的相关知识)



linkedList里的方法:1:voidaddFirst(;2:voidaddLast(;
3:getFirst(;//获取但不移除,如果链表为空,抛nosuchelementExceptionPeekFirst(;//获取但不移除,如果链表为空,返回nullPollFirst(;//获取并移除,如果链表为空,返回null4:getLast(;
5:removeFirst(;

arraylist里的方法:
··························Set元素不能重复,无序
--HashSet此类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。


一:哈希表确定元素是否相同2次判断:1:哈希值(hashCode(2:内容(equals
二:HashSet存数自定义对象。
三:LinkedHashSet
具有可预知迭代顺序的Set接口的哈希表和链接列表实现。
--TreeSet
1:使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator行排序,具体取决于使用的构造方法。
2:判断元素的唯一性方式:就是根据比较方法的返回结果是否为0,0表示为相同元素,不存;
3TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo()方法;
如果不要按照对象中具备的自然顺序进行排序(别人引用对象不需要自然排序)怎么办?可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现comparator接口,覆盖compare方法。将该类对象作为参数传递给TreeSet集合的构造函数;
---------------------------------------------------------------------------------------------------------------------------------
Map:一次添加一对元素。Collection:一次添加一个元素。Map:也成为双列集合Collecction:单列集合。
Map集合存储的就是键值对。Map集合中必须保证键的唯一性;
常用方法:1:添加
Put(key,value:返回前一个和key关联的值,如果没有返回nullkey值相同,替换)2:删除

Voidclear(;清空map集合。Valueremovekey根据指定的key来删除此键值对。
3:判断
BooleancontainKey(key;BooleancontainsValue(value;BooleanisEmpty(;4:获取:
Valueget(key;根据键获取值,如果没有该键返回nullSize();获取键值对的个数;
Map的常用的子类:
--hashTable:内部结构哈希表,同步(键值都不允许为null--hashmap:内部结构哈希表,不同步(键值都可以允许为null
--treemap:内部结构是二叉树,不同步,可以对map中的键进行排序
泛型:jdk1.5出现的安全新特性;
好处:
1:将运行时期的问题classcastException转换到编译时期;2:避免了强制转换的麻烦;
<>:什么时候用?当操作的引用数据类型不确定时。就使用<>.将要操作的引用数据类型
传入即可,其实<>就是一个用于接收具体引用数据类型的参数范围。
在程序中,只要用到了带有《》的类或接口,就要明确传入的具体引用数据类型;
泛型技术是给编译器使用的技术,确保了类型的安全;
运行时,会将泛型去掉,生成的class文件中是不带泛型的,这称为泛型的擦除为什么擦除呢?因为为了兼容运行的类加载器;
泛型的补偿在运行时,通过获取元素的类型进行转换动作。不用使用者进行类型转换了;
泛型类:
泛型接口:
泛型的通配符:?未知类型


泛型限定(上限)(泛型的高级应用)泛型限定(下限)(泛型的高级应用)
?extendsE:接收E类型或者E的子类型对象(上限)
?superE:接收E类型或者E的父类型对象(下限)

本文来源:https://www.2haoxitong.net/k/doc/9881ed449b89680203d825be.html

《集合.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式