五,Map接口
六,总结实现类
(一)ArrayList 底层数数组
(二)Linkedlist 底层是双向链表
(三)Vector 底层是数组,线程安全,但是效率较低,一般不用了
(四)Hashset底层是hashmap,放到hashset里面的元素相当于放到了hasmap的key部分,
(五)Treeset底层是treemap,放到treeset集合中的元素相当于放到了tremap集合的key部分
(六)Hashmp底层是哈希表数据结构
(七)Treemap底层是二叉树数据结构,treemap的可可以自动按照大小顺序排序
(八)Hashtable底层也是哈希表,是线程安全的,效率较低
(九)Properties 是线程安全的,并且key和value的值只能存储string。
七、总结存储元素的特点
(一)List存储元素的特点
1.有序可重复
2.有序:存和取的顺序相同每个元素都有下标。
3.重复:可以存储重复内容。
(二)Set存储元素的特点
1.无序不可重复
2.无序:存和取的顺序不一定相同每个元素没有下标。
3.不可重复:不可以存储重复内容。
(三)Sortedset存储元素的特点
1.无序不可重复的
2.可以排序的
八,Collection
(一)父接口是iterable
(二)collection中的方法
-
add()增添
-
sIze() 获取集合中的元素个数
-
clear清空集合
-
contains() 判断集合里面是否不包含括号内元素
-
如果要使用这个方法需要重写集合内元素中的equals方法,因为这个方法底层调用equals方法。
-
-
remove(某个元素)删除集合中的某个元素
-
底层调用了equals方法
-
如果重写了equals被重写String s1=new string(“hello”);String s2=new string(“hello”);当s1和s2在同一个集合的时候。删除s1也会导致s2被删除
-
-
isEmpty() 判断集合是否为空
-
toArray将集合转换为数组
(三)Iterator
-
迭代器负责遍历集合中的元素,最初并没有指向第一个元素
-
要使用这个方法先要 像这样Collection b=new ArrayList();(等号后面也可以是hashlist,vector)
-
创建iterater,(不要打错了)Iterator it=a.iterator();
-
Object odj=it.next();这个的作用是让迭代器前进以为,并将指向的内容返回。
-
Object odj=it.next();这个的作用是让迭代器前进一位,并将指向的内容返回。
-
迭代器的位置很重要,集合里面的内容一旦改变,迭代器也重新获取,否则会报错。因此在迭代元素的过程中,不能对集合进行增删改的操作。但是可以使用迭代器删除。it.remove()。迭代器去删除的时候会自动更新迭代器。
九,list
(一)List集合元素的特点有序,可重复,有下标
(二)List特色方法(对于开发要多翻阅文档,要多理解里面的单词)
-
add(int index,e element)在指定下标添加元素,
-
这个使用的比较少效率比较低一般就直接使用add(e element)向末尾添加元素
-
如果我们添加的元素是一个集合,不会将集合内的元素拆开,而是将集合作为一个元素。
-
addall 添加一个集合元素的时候会将内容拆开。
-
-
E get() Set没有这个方法,是list集合特有的。返回列表中指定元素位置
-
Int indexof 获取指定对象第一次出现的索引。Lastindexof获取元素最后一次出现的索引。
-
Remove 也可以删除指定下标的元素。有相同的元素只会删除第一个。
-
Set 更改指定位置的元素
-
Retainall 求交集。
(三)List的实现类
-
Arraylist(不是线程安全的
(1)集合的初始化容量是10(底层先创建了一个长度为零的数组,当添加一个元素的时候,初始化容量是10.)
(2)底层是object类的数组
(3)可以在创建的时候手动初始化,也可以直接将集合传进去,可以实现集合类型的转换。
注意:size获取的是当前集合里面的元素个数,而不是集合的容量。
(4)集合的扩容是原先的1.5倍。要尽可能少的扩容因为数组扩容的效率比较低。
(5)数组的优点,*检索的效率高,随机增删元素的效率比较低。不仅是因为有下标的原因,还是因为底层数组发挥作用*,但是数组向数组末尾添加效率是一样的。
(6)*Arraylist是使用较高的集合*。因为往数组末尾添加元素时添加效率不受影响。另外我们查询和检索的操作更多。
复习数组的缺点:
1)数组的随机增删效率低
2)数组无法存储大数据(很难找到一块连续的空间)