1、集合类(框架)
(1)概述
collection
—-List:元素是有序的,元紊可以重复。因为该集合体系有索引.\
--ArayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。
--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。
--Vector:底层是数组数据结构
--set:元紫是无序,元素不可以重复。-
(2)Collection的功能概述
A:添加功能
add(Object obj)
addAll(Collection c)
B:移除功能
remove(Object obj)
removeAll(Collection c)
clear()
C:判断功能
contains(Object obj)
containsAll(Collection c)
isEmpty()
D:获取功能
iterator()
size()
E:交集功能
retainAll(Collection c)
F:转数组功能
toArray()\
注意:
所有带all的不用掌握
交集和转数组不用掌握\
(3)迭代器
迭代器:集合的取出元素方式
(4)List集合共性方法
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add (index,element) ;
addAll (index,collection) ;
删
remove (index) ;
改
set (index,element) ;
查
get (index) :
subList (from,to);
listIterator ();\
(5)Listiterator
List集合特有的迭代器,Listiterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生concurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,Listiterator.
该接口只能通过List集合的list工terator方法获取-
(6)vector中的枚举
枚举就是vector特有的取出方式.发现枚举和迭代器很像。
其实枚举和迭代是—样的-
因为枚举的名称以及方法的名称都过长.所以被迭代器取代了.
枚举郁郁而终了。
(7)linklist特有方法:
addFirst();
addLast( );
getFirst ();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NosuchElementException
removeFirst (:
removeLasti );
获取元素,但是元素被删除。如果集合中没有元素,会出现NosuchElementException
在JDK1.6出现了替代方法-
offerFirst();
offerLast();
peekFi业st ();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null.
pollFirst ( );
po1lLaSt(;
获取元素,但是元素被删除。如果集合中没有元素,会返回null.
(8)HashSet和TreeSet
l--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。.
--Hashset:底层数据结构是哈希表。
Hashset是如何保证元系唯—性的呢?
是通过元素的两个方法,hashcode和equals来完成-
如果元素的Hashcode值相同,才会判断equals是否为true.如果元素的hashcode徽不同,不会调用equals-
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
--TreeSet:可以对Set中的元素排序
set集合的功能和collection是—致的-
底层数据结构是二叉树
保证元素唯一性的方法是compareTo中return 0
Treeset排序的第—种方式:让元素自身具备比较性。
元紊需要实现comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
Treese七的第二种排序方式-
当元素自身不具备比较性时,或者具备的比较性不是所需要的.
这时就需要让集合自身具备比较性。
即在集合初始化时就有比较方式
当元素自身不具备比较性,或者具备的比较性不是所需要的。这时需要让容器自身具备比较性。 定义了比较器,将比较器对象作为参数传递给Treeset集合的构造函数。
当两种排序都存在时,以比较器为主。 定义一个类,实现comparator接口,覆盖compare方法.
(9)泛型概述
1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制.
好处
1.将运行时期出现问题classcastException,转移到了编译时期。
方便于程序员解决问题。让运行事情问题减少,安全。
2,避免了强制转换麻烦-
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型.
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
泛型类定义的泛型,在整个类中有效。如果被方法使用,
那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了,
为了让不同方法可以操作不同类型,而且类型还不确定。
那么可以将泛型定义在方法上-
?通配符,也可以理解为占位符-泛型的限定;
extends E:可以接收E类型或者E的子类型。上限。
super E:可以接收E类型或者E的父类型。下限
2、集合(Map)
(1)概述
Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key,V value)
putAl1(Map<? extends K ? extends v> m)
2,删除
clear()
remove (object key)
3,判断-
containsvalue (object value)containsKey (object key)
isEmpty ()
4,获取-
get (object key)size ()
valueso
entrySet() KeySet()
Map
|--Hashtable:底层是哈希表数据结构,不可以存入nul1键nu11值。该集合是线程同步的。jdk1.0.效率低。
l--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。jdk1 .2 .效率高。
l--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
和set很像- 其实大家,,set底层就是使用了Map集合-
(2)方法
map集合的两种取出方式:
1,keyset:将map中所有的键存入到set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
2,entrySet:
keyset取值方式
Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口,
3、Collections(类)
高级for循环格式:
for(数据类型变量名:被遍历的集合(Collection)或者数组){
}
对集合进行遍历。
只能获取集合元素-但是不能对集合进行操作-
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用Listiterator,还可以在遍历过程中进行增删改查的动作。
可变参数-
其实就是上—种数组参数的简写形式-
不用每一次都手动的建立数组对象-
只要将要操作的元素作为参数传递即可.隐式将这些参数封装成了数组。
静态导入
当类名重名时,需要指定具体的包名-
当方法重名是,指定具备所属的对象或者类-